【发布时间】:2015-10-06 18:35:53
【问题描述】:
我有以下聚合:
$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
【问题讨论】:
-
您构建的日期将无效。如果仍然有问题,请检查您的日期输入并显示您定义它们的代码。
-
我的输入是一个 DateTime 对象。正确的输入是什么?