假设我在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})
不幸的是,它不能像那样工作并返回整个对象。谁能告诉我怎么做?
答案 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"
]
}