Mongo Aggregate Query не работает как PHP Mongo Query

1

У меня есть следующий запрос 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 не является объектом '

Теги:

1 ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню