У меня есть следующий запрос Mongo Aggregate:
db.getCollection('datas').aggregate(
{
"$match":{
"payload.category_ids":ObjectId("5502b04bee60fc1ed06e2fa4"),
"time":{ "$gte":new Date(2015,4,22) }
}
},
{
"$group":{
_id: "$user_id",
num_use: {"$sum":1}
}
},
{
"$sort":{"num_use":-1}
},
{
"$match": {
'num_use':{"$gte":10}
}
}
)
Который я пытаюсь превратить в PHP Mongo Query так:
$topUserCat = $datas->aggregate(
array(
array('$match'=>
array(
'payload.category_ids'=>new MongoId($category_id),
'time'=>array('$gte'=>new MongoDate(strtotime('-1 week')))
)
)
),
array(
'$group'=>array(
'_id'=>'$user_id',
'num_use'=>array('$sum'=>1)
)
),
array(
'$match'=>array(
"num_use"=>array('$gte'=>10)
)
)
);
Без последнего совпадения этот запрос работает в PHP. Однако окончательный матч работает в запросе Mongo вверху, поэтому я чувствую, что что-то пропустил в PHP-запросе. Ошибка, которую я получаю в настоящее время, является исключением: элемент конвейера 0 не является объектом '
Я не могу сказать, является ли это единственной ошибкой, но ваш array
не правильно вложен:
$topUserCat = $datas->aggregate(
array( // <------------------- starts here
array('$match'=>
...
)
), // <------------------- ends here
array(
'$group'=>
...
),
array(
'$match'=>
...
)
);
Должно быть:
$topUserCat = $datas->aggregate(
array( // <------------------- starts here
array('$match'=>
...
),
array(
'$group'=>
...
),
array(
'$match'=>
...
)
) // <------------------- ends here
);