0
我有以下聚合:
$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對象。什麼纔是正確的輸入? – createproblem
[MongoDate](http://php.net/manual/en/class.mongodate.php) –