如何为特定 mongo 文档实施 TTL

How to implement TTL for specific mongo documents

首先要给您一些背景信息,我的服务会临时存储通知。有一个最大 TTL(由管理员预定义),但是我想允许用户为每个通知指定自定义 TTL。当然,此 TTL 需要始终低于最大 TTL。

我的问题是,mongo 每个文档都有一个内置的 TTL 吗?我知道整个文档都有这种类型,也就是说,每个文档(来自同一集合)都具有相同的 TTL 值。但是在这里我想要来自同一集合的文档的不同 TTL 值。

PS:例如,我可以使用 quartz 作业来实现这个用例,我只是想避免开发已经实现的解决方案。

是的,Mongo 在内部保留每个文档的到期日期,您可以为每个文档手动设置到期日期。

它在 Mongo 的文档中有描述:https://docs.mongodb.com/manual/tutorial/expire-data/#expire-documents-at-a-specific-clock-time

文档中的相关示例:

db.log_events.createIndex( { "expireAt": 1 }, { expireAfterSeconds: 0 } )
db.log_events.insert( {
   "expireAt": new Date('July 22, 2013 14:00:00'),
   "logEvent": 2,
   "logMessage": "Success!"
} )

及其解释:

MongoDB will automatically delete documents from the log_events collection when the documents' expireAt value is older than the number of seconds specified in expireAfterSeconds, i.e. 0 seconds older in this case. As such, the data expires at the specified expireAt value.