Mongo聚合查询不能用作PHP Mongo查询

时间:2015-05-30 14:09:27

标签: php mongodb

我有以下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查询:

$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 :(得分: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
);