如何获取mongo Document的剩余TTL

时间:2017-04-23 03:09:04

标签: mongodb

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

我在谷歌搜索过但未找到任何相关信息。

谢谢

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:-2)

试试这个

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

了解更多here