$slice(截取数组子集)

最后更新:2026-10-09

$slice(截取数组子集)

$slice 从数组中截取一部分元素,支持两种写法:两参数形式取前 n 个元素(n 为负则取最后 n 个),三参数形式先跳过若干元素再取指定数量。典型场景包括分页展示评论、取最近几条订单记录、限制返回的标签数量。它返回新数组,不修改原数组;参数为 null 时返回 null。与字符串的 $substr 思路类似,但只作用于数组。

分类数组
MongoDB 版本1.0+
示例语言mongosh (Shell)

📝 语法

{ $slice: [ <数组>, <数量> ] } 或 { $slice: [ <数组>, <跳过>, <数量> ] }

⚙️ 参数

数组要截取的数组。
数量要取的元素个数;两参数形式中为负表示从末尾取最后 n 个。
跳过可选,三参数形式中先跳过的元素个数;为负表示从末尾倒数作为起点。

返回值:截取出的子数组;参数为 null 时返回 null

▶ 示例

请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):

// $slice:取前 3 个标签
db.posts.aggregate([
  { $project: {
      topTags: { $slice: ['$tags', 3] }
  } }
])

运行结果:

{ '_id': 1, 'topTags': [ 'mongo', 'db', 'nosql' ] }

📌 注意事项

📚 相关教程

❓ 常见问题

Q$slice 怎么取数组最后几个元素?
A用负数量,如 { $slice: ['$arr', -3] } 取最后 3 个。
Q$slice 支持分页吗?
A支持,三参数形式 { $slice: ['$arr', 10, 10] } 跳过 10 个再取 10 个。
Q截取数量超过数组长度会报错吗?
A不会,返回实际存在的元素,不会补 null。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏