如何在Mongo中限制数组子元素?

11

假设我在Mongo中有以下数据模型:

{
   _id: ...,
   name: "...",
   obj: {...},
   list: [ ... ],
}
现在假设我的“list”数组很长,我不想每次都获取整个文档。因此我想获取“obj”和“name”,但只想获取“list”中的最后5个元素。如何使用Mongo实现?我正在使用pymongo。
2个回答

20

我认为你正在寻找 $slice 操作符。相关文档请参见这里

你要查找的语法应该类似于这个:

db.coll.find({}, {obj:1, name: 1, list:{$slice: -5}}); // last 5

请注意,默认情况下,这也会返回_id字段。如果您不想要_id,请在obj:1之前添加_id:0。这是JS语法,但Python语法将非常相似。


3
本文介绍MongoDB中的$ slice投影操作符。$slice用于从数组字段中获取子集,以便在查询结果中只返回该子集。它可以与其他投影操作符一起使用来构建更复杂的查询。$slice还可以接受负数参数以表示从数组末尾开始的偏移量。 - laggingreflex

0

使用$slice运算符来限制数组元素

GeoLocation.find({},{name: 1, geolocation:{$slice: -5}})
    .then((result) => {
      res.json(result);
    })
    .catch((err) => {
      res.status(500).json({ success: false, msg: `Something went wrong. ${err}` });
});

其中 geolocation 是一个数据数组,我们从中获取最后 5 条记录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接