$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 条
📌 注意事项
- 必须与 $push 内的 $each 一起使用
- 负值从末尾保留,正值从开头保留
- 与投影 $slice 同名不同用
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q更新里的 $slice 和投影里的 $slice 一样吗?
A不一样。更新 $slice 截断数组;投影 $slice 只影响返回结果。
Q$slice: -10 是什么意思?
A从数组末尾保留 10 条,实现滚动日志。
Q$slice 必须配 $each 吗?
A是,MongoDB 5.0 起 $slice 只能与 $each 组合使用。