存储在文档字段中的数组上的分页

时间:2015-08-03 16:34:51

标签: mongodb pagination

假设我在mongo数据库中有一个人物收集:

[{
    id: 1,
    name: "Tom",
    animals: ["cat", "dog", "fish", "bear"]
},
{
    id: 2,
    name: "Rob",
    animals: ["shark", "snake", "fish", "bear", "panda"]
},
{
    id: 3,
    name: "Matt",
    animals: ["cat", "fish", "bear"]
}]

出于REST API的目的,我需要创建一个用于查看人物动物的分页系统,每个请求只返回3个。例如,如果您转到/people/2,API应该返回此数组:

["shark", "snake", "fish"]

我正在尝试使用Mongo方法获得此结果。这是我的尝试:

db.getCollection('people').find({id: 2}, {animals: 1, _id:0}, {limit: 3})

不幸的是,它不能像那样工作并返回整个对象。谁能告诉我怎么做?

1 个答案:

答案 0 :(得分:6)

对于您的问题,您需要使用$slice投影操作符而不是limit。后者限制了查询结果返回的文档的数量。相反,$slice运算符的目的正是您所需要的。

以下是如何在您的用例中使用它的示例:

> db.getCollection('people').find({id: 2}, {_id: 0, animals: {$slice: [0, 3]}})
{
    "id" : 2,
    "name" : "Rob",
    "animals" : [
        "shark",
        "snake",
        "fish"
    ]
}