在$match中聚合带有日期($lte, $gte)的空结果


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);

聚合将返回一个空的Result。

如果我直接在我的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);

谢谢@ blake Seven