我一直在考虑使用TTL中的构建功能,但动态更改到期日期并不容易。 由于mongodb正在使用后台任务清除数据。根据“> Certain_date”编码我自己的清除功能是否有任何缺点,并且每天运行一次? 这样,我可以动态更改TTL值,并且此日期字段不必是单个索引。我可以将此字段重用为复杂索引的一部分,以最大限度地减少索引数。
答案 0 :(得分:19)
有两种方法可以设置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 })
答案 1 :(得分:5)
我一直在考虑使用TTL中的构建功能,但动态更改到期日期并不容易
这很奇怪。为什么会出现问题?如果您的文档包含字段Expires
,则可以随时更新该字段以动态延长或缩短文档的使用期限。
根据“> certain_date”编码我自己的清除功能是否有任何缺点,并且每天运行一次?
最小化索引的数量是一件好事,但问题是它是否真的值得付出努力。只有你能回答这个问题。我的建议是:从已经存在的东西开始,如果有可能的话,并且只有当你真的需要时才会提出更好的东西。