【问题标题】:How to implement TTL for specific mongo documents如何为特定的mongo文档实现TTL
【发布时间】:2021-11-19 00:27:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: java mongodb spring-boot hibernate ttl


    【解决方案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 值处过期。

    【讨论】:

    • 您好,感谢您的回答。不知何故,我误解了官方文档。我认为所有文件都会在指定秒后过期。现在我看到它取决于日期指定的值(对于同一集合中的任何文档可能不同)。
    • 没问题,默认情况下可以为所有文档设置相同的到期时间,所以一开始可能不清楚,但正如您所提到的 - 可以更改每个文档的到期日期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 2016-10-29
    • 2021-11-16
    相关资源
    最近更新 更多