如何在子字段中正确应用$ limit和$ skip?

时间:2016-03-01 15:59:10

标签: mongodb mongodb-query aggregation-framework mongodb-php

我从mongodb开始,我发现以下方案存在很多困难。

{
    "_id" : "AAA",
 "events" : [ 
        {
            "event" : "001",
            "time" : 1456823333
        }, 
        {
            "event" : "002",
            "time" : 1456828888
        }, 
        {
            "event" : "003",
            "time" : 1456825555
        },...
        ]
}

我希望按日期排序事件并应用限制并跳过。 我正在使用以下查询:

$op = array(
    array('$match' => array('_id' => $userId)),
    array('$unwind' => '$events'),
    array('$sort' => array('events.time' => -1)),
    array('$group' => array('_id' => '$_id', 
                            'events' => array('$push' => '$events')))
    //,array('$project' => array('_id' => 1, 'events' => array('$events', 0, 3)))
    //,array('$limit' => 4)
    //,array('$skip' => 3)
);  
$result= Mongo->aggregate('mycollection', $op);

我已尝试过所有内容来过滤 $ project或$ limit和$ skip ,但这些都无效。

我应该如何在事件中应用限制和skyp条件?

如果我不应用上述“限制”条件,则会正确排序结果。 结果:

{ "waitedMS":0,
  "result":[
            {
            "_id":"AAA",
            "events":[
            {
                "event":"002",
                "time":1456828888,
            },
            {
                "event":"003",
                "time":1456825555,
            },
            {
                "event":"001",
                "time":1456823333,
            },...
            }
            ],
    "ok":1
}

订单正确,但我不能限制分页的结果数量。

0 个答案:

没有答案