由于时区,MongoDB TTL无法正常工作?

时间:2014-02-07 17:13:28

标签: mongodb mongoengine

我正在尝试让MongoDB使用TTL自动删除文档,但我似乎无法让它工作。这是一个示例文档:

{
    "_id" : ObjectId("52f50824169cb8055393c01e"),
    "_cls" : "ExpiringPageView",
    "viewable" : ObjectId("523f3586169cb81d568e442f"),
    "ip" : "127.0.0.1",
    "datetime" : ISODate("2014-02-07T09:21:56.628Z")
}

以下是该集合的索引:

[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "ns" : "mysite.expiring_page_view",
        "name" : "_id_"
    },
    {
        "v" : 1,
        "key" : {
            "_cls" : 1,
            "datetime" : 1
        },
        "ns" : "mysite.expiring_page_view",
        "name" : "_cls_1_datetime_1",
        "background" : false,
        "expireAfterSeconds" : 60,
        "dropDups" : false
    }
]

我想知道由于时区的不同,Mongo是否会使这些文件失效。当我将new ISODate()输入到Mongo控制台时,我会在文档的datetime字段中获得7小时(可能是GMT)的日期/时间。这可能就是我的文件没有到期的原因吗?

如果它有帮助,我使用mongoengine作为我的文档对象映射器。

1 个答案:

答案 0 :(得分:2)

您的TTL索引是一个复合索引,因为它包含_clsdatetime,但is not supported。确保TTL索引仅在datetime上是一个简单的非复合索引。