You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为MongoDB的prices集合设置100条数据上限并自动清理旧数据?

实现MongoDB prices集合最多保留100条数据的方法

方法一:使用固定集合(Capped Collection)

这是MongoDB原生支持的自动维护固定文档数量的方案,会按插入顺序自动淘汰最早的文档,完全匹配你的需求。

  1. 创建固定集合
    打开MongoDB Shell(命令行输入mongosh),执行以下命令创建prices集合:
db.createCollection("prices", { capped: true, size: 1048576, max: 100 })
  • capped: true:标记为固定集合
  • size:必填参数,设置集合的最大字节容量(这里填1MB=1048576字节,足够容纳100条常规数据)
  • max:指定集合最多保留的文档数,达到100后新增数据会自动删除最早的文档
  1. 验证配置
    执行命令查看集合属性,确认固定集合配置生效:
db.prices.stats()

输出中会显示capped: true,以及你设置的max和size值。

  1. 正常插入数据
    直接执行插入操作即可,无需额外处理,集合会自动维持100条数据的上限:
db.prices.insertOne({ price: 10.5, timestamp: new Date() })

(建议添加timestamp字段,方便直观确认文档的插入顺序)

方法二:手动控制插入逻辑(适合已存在的普通集合)

如果已经创建了普通prices集合,不想改为固定集合,可以在插入时手动检查并清理旧数据:

  1. 插入+清理脚本
    执行以下逻辑,插入新数据后如果总数超过100,删除最早的文档:
// 插入新数据
db.prices.insertOne({ price: 12.3, timestamp: new Date() })

// 计算超出的文档数量,删除最早的一批
const excessCount = db.prices.countDocuments() - 100
if (excessCount > 0) {
  db.prices.deleteMany({}, { sort: { _id: 1 }, limit: excessCount })
}
  • 这里默认用_id排序(MongoDB的_id包含时间戳,能反映插入顺序),如果你有自定义的时间字段(比如createTime),可以把{ _id: 1 }换成{ createTime: 1 }。

注意事项

  • 固定集合创建后无法修改配置,也不能转为普通集合,如需调整参数,只能删除集合后重新创建。
  • 手动控制方式需要确保每次插入都执行清理逻辑,灵活性更高,但性能略低于原生固定集合。

内容的提问来源于stack exchange,提问作者Junior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:42:37