2

我有一个这样的文档结构:

{
    "name":"test", 
    "family":"test", 
    score:[
    {
        "point":3,
        "des":"blah" 
    },
    {
        "point":4,
        "des":"blahblah" 
    },
    {
        "point":5,
        "des":"blahblahblah!!" 
    },
    {
        "point":2,
        "des":"blah!!!!" 
    },......
   ]
}

现在我想获得带有分页的分数部分。如何通过分页对分数项目进行排序和投影?

4

1 回答 1

0

使用这样的示例数据

{
    "name":"test", 
    "family":"test", 
    score:[
    {
        "point":3,
        "des":"blah" 
    },
    {
        "point":4,
        "des":"blahblah" 
    },
    {
        "point":5,
        "des":"blahblahblah!!" 
    },
    {
        "point":2,
        "des":"blah!!!!" 
    }
   ]
}

以下管道

db.getCollection('yourCollection').aggregate([
    // .. you may want to include a $match stage here
    {
        $unwind: "$score"
    },
    {
        $sort: { "score.point": 1 }
    },
    {
        $skip: 1
    },
    {
        $limit: 2
    },
    {
        $group: {
            _id: "_id", 
            score: { $push: "$score" }
        }
    },
    {
        $project: { _id: 0, score: 1 }
    }
])

将返回该输出

{
    "score" : [ 
        {
            "point" : 3,
            "des" : "blah"
        }, 
        {
            "point" : 4,
            "des" : "blahblah"
        }
    ]
}

要修改页码或大小,只需根据需要调整$skip$limit阶段的值。

显示工作管道的 GIF

于 2016-08-14T06:15:41.310 回答