mongodb TTL没有删除文件

jck*_*111 5 ttl mongodb

我有一个简单的架构,如:

{
    _id: String,      // auto generated
    key: String,      // there is a unique index on this field
    timestamp: Date() // set to current time
}
Run Code Online (Sandbox Code Playgroud)

然后我像这样设置TTL索引:

db.sess.ensureIndex( { "timestamp": 1 }, { expireAfterSeconds: 3600 } )
Run Code Online (Sandbox Code Playgroud)

我希望记录在1小时后删除,但永远不会删除.我打开了详细的日志记录,我看到TTLMonitor正在运行:

Tue Sep 10 10:42:37.081 [TTLMonitor] TTL: { timestamp: 1.0 } { timestamp: { $lt: new Date(1378823557081) } }
Tue Sep 10 10:42:37.081 [TTLMonitor] TTL deleted: 0
Run Code Online (Sandbox Code Playgroud)

当我自己运行该查询时,我看到所有过期的记录都会回来:

db.sess.find({ timestamp: { $lt: new Date(1378823557081) }})

...
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我很难过.

编辑 - 下面的示例文档

{ "_id" : "3971446b45e640fdb30ebb3d58663807", "key" : "6XTHYKG7XBTQE9MJH8", "timestamp" : ISODate("2013-09-09T18:54:28Z") }
Run Code Online (Sandbox Code Playgroud)

jco*_*lum 5

  1. 你能告诉我们插入的记录实际上是什么样的吗?

  2. "从不"多久了?因为有一个很大的警告:

    警告:TTL索引不保证将立即删除过期数据.文档到期的时间与MongoDB从数据库中删除文档的时间之间可能存在延迟.

  3. 时间戳字段是否已有索引?

  • TTLMonitor每60秒运行一次,所以我认为它应该在到期后至少1分钟内被拿起.从来没有我的意思是永远(例如,几天过去,没有任何东西被删除).只有两个索引--TTL索引和我在关键字段指出的唯一索引.编辑中的示例文档.谢谢你的帮助. (3认同)
  • 不,我想知道你在做什么时看到了什么`db.sess.find().pretty()` - 我只是想确认时间戳字段是否存在并且看起来并不好笑.对于索引,你应该做`db.sess.getIndexes()`来确认那里的所有索引. (3认同)