有没有办法在MongoDB中返回文档中的部分数组?

时间:2015-08-15 01:11:47

标签: mongodb

假装我有这份文件:

{
    "name": "Bob",
    "friends": [
        "Alice",
        "Joe",
        "Phil"
    ],
    "posts": [
        12,
        15,
        55,
        61,
        525,
        515
    ]
}

只有少数帖子,一切都很好。但是,让我们说posts大幅度增长(并达到10K +帖子点)。一位朋友提到我可以按顺序保持数组(即第一个条目是最新帖子的ID,所以我不必排序)并在开头添加新帖子。通过这种方式,我可以得到数组的第一个,比方说10个元素,以获得10个最新的项目。

有没有办法一次只检索帖子n?我不需要返回10K的帖子,当他们中的大多数人甚至不会被看到时,但我仍然需要保留记录。

2 个答案:

答案 0 :(得分:3)

您可以在投影中使用mongoDB的$slice运算符从数组中获取n个元素,如下所示:

db.collection.find({
   //add condition here
  }, {
    "posts": {
    $slice: 3 //set number of element here
      //negative number slices from end of array
    }
})

答案 1 :(得分:-1)

你可以这样做: 为您想要的帖子创建一个列表(比如说您想要前3个帖子)并返回该列表

for doc in db.collections.find({your query}):
    temp = ()
    for i in range (2):
        temp.push(doc['posts'][i])
    return temp