如何为特定的mongo文档实现TTL
Posted
技术标签:
【中文标题】如何为特定的mongo文档实现TTL【英文标题】:How to implement TTL for specific mongo documents 【发布时间】:2021-11-19 00:27:29 【问题描述】:首先为您提供一些背景信息,我的服务会临时存储通知。有一个最大 TTL(由管理员预定义),但是我想允许用户为每个通知指定自定义 TTL。当然,这个 TTL 需要始终低于最大 TTL。
我的问题是,mongo 是否有每个文档的内置 TTL?我知道整个文档类型都有,也就是说,每个文档(来自同一个集合)都具有相同的 TTL 值。但是在这里,我希望来自同一集合的文档具有不同的 TTL 值。
PS:例如,我可以使用石英作业来实现这个用例,我只是想避免开发已经实现的解决方案。
【问题讨论】:
【参考方案1】:是的,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!"
)
及其解释:
当文档的 expireAt 值早于 expireAfterSeconds 中指定的秒数时,MongoDB 将自动从 log_events 集合中删除文档,即在这种情况下早 0 秒。因此,数据在指定的 expireAt 值处过期。
【讨论】:
您好,感谢您的回答。不知何故,我误解了官方文档。我认为所有文件都会在指定秒后过期。现在我看到它取决于日期指定的值(对于同一集合中的任何文档可能不同)。 没问题,默认情况下可以为所有文档设置相同的到期时间,所以一开始可能不清楚,但正如您所提到的 - 可以更改每个文档的到期日期。以上是关于如何为特定的mongo文档实现TTL的主要内容,如果未能解决你的问题,请参考以下文章
如何为 REST API 构建 Mongo 数据库 [关闭]