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

时间:2015-10-06 18:35:54

标签: php mongodb

我有以下聚合:

$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

1 个答案:

答案 0 :(得分:3)

它将与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);

谢谢@Blakes Seven