我正在尝试让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作为我的文档对象映射器。
答案 0 :(得分:2)
您的TTL索引是一个复合索引,因为它包含_cls
和datetime
,但is not supported。确保TTL索引仅在datetime
上是一个简单的非复合索引。