如何使用Mongo聚合框架从指定起始索引切片数组?
MongoDB聚合框架中从指定索引开始切片未知长度数组
MongoDB的$slice操作符参数逻辑和JavaScript的Array.slice()不同:
- 你当前使用的
{ $slice: ['$array', 2] }是取数组的前2个元素,这就是结果不符合预期的原因。 - 要实现和
array.slice(2)(从索引2开始取所有后续元素)一样的效果,需要使用$slice的三参数形式:{ $slice: [ <数组字段>, <起始索引>, <截取长度> ] }
因为数组长度未知,我们可以用$size操作符获取数组总长度,再通过$subtract计算出从索引2开始的元素个数,或者直接将总长度作为截取长度(Mongo会自动取到数组末尾)。
方法一:用总长度作为截取长度
db.collection.aggregate([ { $project: { _id: 1, array: { $slice: ['$array', 2, { $size: '$array' }] } } } ])
方法二:计算精准的截取长度
db.collection.aggregate([ { $project: { _id: 1, array: { $slice: [ '$array', 2, { $subtract: [{ $size: '$array' }, 2] } ] } } } ])
两种写法都能得到和JavaScriptarray.slice(2)一致的结果,比如对于数组[1,2,3,4,5,6],会返回[3,4,5,6]。
内容的提问来源于stack exchange,提问作者Anatol Zakrividoroga
相关产品推荐
相关产品推荐

