繁体   English   中英

MongoDB PHP聚合空结果,日期($ lte,$ gte)在$ match中

[英]MongoDB PHP Aggregation empty results with date ($lte, $gte) in $match

我有以下汇总:

$pipeline = array(
    array('$match' => array(
        'matchDate' => array(
            '$lte' => $dateEnd, // DateTime object
            '$gte' => $dateStart // DateTime object
         )
    )),
    array('$group' => array(
        '_id' => '$sport',
        'count' => array('$sum' => 1)
    ))
);

$m = new \MongoClient('localhost');
$c = $m->selectDB('test_database')->selectCollection('Match');
$t = $c->aggregate($pipeline);

此聚合将返回一个空的结果。

如果我直接在MongoDB上运行聚合,则该聚合可以正常工作并获得预期的结果。 这是本机查询。

db.Match.runCommand({
  "aggregate": "Match", 
  "pipeline": [
    {
      "$match": { 
        "matchDate": {
          "$lte": new ISODate("2015-10-07T23:59:59+02:00"), 
          "$gte": new ISODate("2015-10-06T00:00:00+02:00") 
        } 
      } 
    }, 
    { 
      "$group": { "_id": "$sport", "count": { "$sum": 1 } } 
    }
]});

仅在聚合时会出现问题。 查找具有日期($ lte,$ gte)的查询也没有问题。

这是一个示例文件。

{
  "_id": ObjectId("5613bbb79042ad801f0041ab"),
  "sport": ObjectId("5613bbb79042ad801f0041a8"),
  "matchDate": new Date("2015-09-26T13:45:00+0200")
} 

有人知道这里发生了什么吗?

我正在使用

MongoDB支持1.6.11

PHP 5.6.13

MongoDB 3.0.6版

它将与MongoDate一起使用。

$pipeline = array(
    array('$match' => array(
        'matchDate' => array(
            '$lte' => new MongoDate($dateEnd->getTimestamp()),
            '$gte' => new MongoDate($dateStart->getTimestamp())
         )
    )),
    array('$group' => array(
        '_id' => '$sport',
        'count' => array('$sum' => 1)
    ))
);

$m = new \MongoClient('localhost');
$c = $m->selectDB('test_database')->selectCollection('Match');
$t = $c->aggregate($pipeline);

谢谢@布雷克斯七

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM