$slice(限制数组长度,更新)

最后更新:2026-10-09

$slice(限制数组长度,更新)

$slice 作为更新修饰符,在 $push 后限制数组长度。`{ $push: { log: { $each: [msg], $slice: -10 } } }` 只保留最近 10 条。负值从数组末尾截取,正值从开头截取。常与 $each 组合实现「滚动日志」效果,与投影里的 $slice 同名但作用不同。

分类更新修饰器
MongoDB 版本1.0+
示例语言mongosh (Shell)

📝 语法

{ $push: { <数组字段>: { $each: [ <值> ], $slice: <数量> } } }

⚙️ 参数

数组字段要限制长度的数组字段名。
数量保留数量;负数从末尾保留。

返回值:更新结果文档

▶ 示例

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

// $slice:只保留最近 10 条日志
// -10 表示从末尾保留 10 条
db.devices.updateOne(
  { _id: 1 },
  { $push: { log: { $each: ['boot ok'], $slice: -10 } } }
)

运行结果:

// log 数组追加一条后截断,始终保留最近 10 条

📌 注意事项

更多实战案例即将上线,敬请期待。

📚 相关教程

❓ 常见问题

Q更新里的 $slice 和投影里的 $slice 一样吗?
A不一样。更新 $slice 截断数组;投影 $slice 只影响返回结果。
Q$slice: -10 是什么意思?
A从数组末尾保留 10 条,实现滚动日志。
Q$slice 必须配 $each 吗?
A是,MongoDB 5.0 起 $slice 只能与 $each 组合使用。
Web-Tutorial.com

Web-Tutorial 技术团队

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

100%

🙏 帮我们做得更好

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

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