我有以下聚合:
$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.13MongoDB 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