MongoDB - TTL 索引 - 未删除的文档

Posted

技术标签:

【中文标题】MongoDB - TTL 索引 - 未删除的文档【英文标题】:MongoDB - TTL Index - documents not removed 【发布时间】:2014-05-05 15:44:49 【问题描述】:

我在这里看到了一个类似的问题,但是 OP 声称他有错字。

mongodb TTL not removing documents

我想我没有错别字。我通过插入 3 个文档创建了一个集合。 然后我在 LastUpdated 上添加了一个 TTL 索引,expireAfterSecs = 120 秒。 超过 3-4-5 分钟后,没有文件被删除。

这是为什么呢?我做错了什么?

[test] 2014-03-26 18:35:35.154 >>> db.test_ttl.getIndexes();
[
        
                "v" : 1,
                "key" : 
                        "_id" : 1
                ,
                "ns" : "test.test_ttl",
                "name" : "_id_"
        ,
        
                "v" : 1,
                "key" : 
                        "LastUpdated" : 1
                ,
                "ns" : "test.test_ttl",
                "name" : "LastUpdated_1",
                "expireAfterSecs" : 120
        
]
[test] 2014-03-26 18:35:45.378 >>> db.test_ttl.find();

        "_id" : ObjectId("5333556a426e7309c6213d19"),
        "x" : 1,
        "LastUpdated" : ISODate("2014-03-26T22:32:10.628Z")


        "_id" : ObjectId("5333556e426e7309c6213d1a"),
        "x" : 2,
        "LastUpdated" : ISODate("2014-03-26T22:32:14.976Z")


        "_id" : ObjectId("53335581426e7309c6213d1b"),
        "x" : 100,
        "LastUpdated" : ISODate("2014-03-26T22:32:33.912Z")

[test] 2014-03-26 18:35:50.58 >>> new Date();
ISODate("2014-03-26T22:35:52.819Z")
[test] 2014-03-26 18:35:52.835 >>> new Date();
ISODate("2014-03-26T22:36:03.927Z")
[test] 2014-03-26 18:36:03.927 >>> db.test_ttl.find();

        "_id" : ObjectId("5333556a426e7309c6213d19"),
        "x" : 1,
        "LastUpdated" : ISODate("2014-03-26T22:32:10.628Z")


        "_id" : ObjectId("5333556e426e7309c6213d1a"),
        "x" : 2,
        "LastUpdated" : ISODate("2014-03-26T22:32:14.976Z")


        "_id" : ObjectId("53335581426e7309c6213d1b"),
        "x" : 100,
        "LastUpdated" : ISODate("2014-03-26T22:32:33.912Z")

[test] 2014-03-26 18:36:06.376 >>> new Date();
ISODate("2014-03-26T22:36:07.671Z")
[test] 2014-03-26 18:36:07.671 >>>
[test] 2014-03-26 18:39:32.733 >>> db.test_ttl.find();

        "_id" : ObjectId("5333556a426e7309c6213d19"),
        "x" : 1,
        "LastUpdated" : ISODate("2014-03-26T22:32:10.628Z")


        "_id" : ObjectId("5333556e426e7309c6213d1a"),
        "x" : 2,
        "LastUpdated" : ISODate("2014-03-26T22:32:14.976Z")


        "_id" : ObjectId("53335581426e7309c6213d1b"),
        "x" : 100,
        "LastUpdated" : ISODate("2014-03-26T22:32:33.912Z")

[test] 2014-03-26 18:39:44.355 >>> new Date();
ISODate("2014-03-26T22:39:46.086Z")
[test] 2014-03-26 18:39:46.102 >>>

【问题讨论】:

【参考方案1】:

好吧,没关系。这也是笔误。这是 我正在阅读的书中有一个错字(第 114 页)。

http://www.oreilly.com/catalog/errata.csp?isbn=0636920028031

正确的选项是 expireAfterSeconds 而不是 expireAfterSecs。 因此,由于这个错字,我没有正确创建 TTL 索引。 提出问题后4-5分钟意识到这一点。

【讨论】:

以上是关于MongoDB - TTL 索引 - 未删除的文档的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 不删除 TTL 索引文档

MongoDB 不删除 TTL 索引文档

mongodb TTL不删除文档

mongodb TTL不删除文档

mongo ttl索引

mongodb 设置自动删除过期数据