【问题标题】:How to get remaining TTL for mongo Document如何获取mongodb文档的剩余TTL
【发布时间】:2017-09-19 21:19:25
【问题描述】:

我在 mongoDB 中创建了一个集合,为此我为字段“expireAt”创建了索引,该字段是一个日期时间,并将 expireAfterSeconds 属性设置为 0。 因为我想在文档级别而不是在集合级别设置 TTL。 正如我在redis中知道的那样,我可以获得特定密钥的剩余TTL 只是有疑问在 mongoDB 中可能吗?我可以在哪里获得给定文档的剩余到期时间。

我在谷歌上搜索过,但没有找到任何相关信息。

谢谢

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    如果您将每个文档的到期时间设置为 0,则剩余时间将是当前时间与文档中的 TTL 日期字段(例如 expireAt)之间的差异。没有特定的服务器函数来查询这个,但您可以在您的应用程序中计算它或使用 MongoDB 的聚合框架。

    使用mongo shell 的示例返回文档有资格在下一次 TTL 传递中删除之前的剩余时间(以毫秒为单位):

    db.mycoll.aggregate(
        { $project: {
            expireAt: 1,
            ttlMillis: {
                $subtract: [ "$expireAt", new Date() ]
            }
        }}
    )
    

    注意:TTL 后台线程每 60 秒运行一次,因此文档可能会在其名义到期后保留一分钟或更长时间。

    【讨论】:

      【解决方案2】:

      试试这个

      db.hellos.createIndex( { "expireAt": 1 }, { expireAfterSeconds: 3600 } )
      

      阅读更多here

      【讨论】:

      • 我想为给定的文档保留 ttl。你刚才给的命令在mongo集合的特定字段上创建了TTL。
      • 我认为这个文档here可以帮助你更多。
      • 嗨,我想通过文档,但没有功能可以获取文档的剩余 ttl。我想我将不得不按照我的要求获取过期数据并执行操作。
      猜你喜欢
      • 2022-11-04
      • 1970-01-01
      • 2013-09-14
      • 2016-04-20
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多