我一直在考虑使用内置 TTL 功能,但是动态更改过期日期并不容易。 由于 mongodb 正在使用后台任务清除数据。仅根据“> certain_date”编写我自己的清除功能并每天运行一次是否有任何缺点? 这样,我可以动态更改 TTL 值,并且此日期字段不必是单个索引。我可以将此字段作为复杂索引的一部分重用,以最大限度地减少索引数量。
最佳答案
有两种方法可以设置 expiration date on a TTL collection :
- 在全局级别,创建索引时
- 每个文档,作为文档中的一个字段
这些模式是专有的。
全局到期
如果您希望所有文档在创建后 3 个月过期,请使用第一种模式,通过创建如下索引:
db.events.ensureIndex({ "createdAt": 1 }, { expireAfterSeconds: 7776000 })
如果您稍后决定将到期时间更改为“4 个月”,您只需使用 collMod 更新 expireAfterSeconds 值。命令:
db.runCommand({"collMod" : "events" , "index" : { "keyPattern" : {"createdAt" : 1 } , "expireAfterSeconds" : 10368000 } })
每个文档的有效期
如果您想让每个文档都有自己的到期日期,请将特定日期保存在“expiresAt”之类的字段中,然后使用以下命令索引您的集合:
db.events.ensureIndex({ "expiresAt": 1 }, { expireAfterSeconds: 0 })
关于mongodb - mongodb的ttl集合有什么好处? vs 从管家那里清除数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19106684/