使用Casbah EnsureIndex在Mongo中过期收藏

时间:2013-08-16 04:42:59

标签: mongodb casbah

我试图使用Casbah的ensureIndex API在Mongo中使一个集合到期。

基于此文件      http://docs.mongodb.org/manual/tutorial/expire-data/

我正在使用casbah提出的ensureIndex API

 collection.ensureIndex(DBObject("status" -> 1, "expireAfterSeconds" -> 120))

在2分钟内过期收藏......

该集合未被驱逐或过期。

我在这里错过了什么吗?

由于

2 个答案:

答案 0 :(得分:3)

有几件事需要检查:

  1. 您是否只是将文档关注到T并尝试在status字段上创建一个在文档中实际不存在的索引? (必须至少问...
  2. status字段是否包含JUST dates?它理论上可以混合,但只考虑具有日期类型的文档到期。
  3. 您是否检查了收集索引以确保索引已正确创建?
  4. 要从控制台运行检查索引:db.collection.getIndexes()。如果索引创建成功,则仔细检查文档中是否有相应的status字段,并且它们是正确的日期。

    单独添加索引不会为您创建日期字段 - 您需要将其添加到文档中或使用不属于任何其他索引的现有日期字段。

    另请注意,来自文档:

      

    TTL索引通过删除后台任务中的文档来使数据过期   每60秒运行一次

    因此,如果您有120 second到期,请记住,文件可能会保留120 seconds最多179 seconds,根据文件的时间而提供或接受已过期且后台任务最后一次运行。

    编辑:正如评论中所述 - 无法根据TTL索引删除集合本身,索引只会使集合中的文档过期。

答案 1 :(得分:0)

我想,你是以错误的方式传递选项。

应该是 -

collection.ensureIndex(DBObject("status" -> 1), DBObject("expireAfterSeconds" -> 120))

而不是 -

collection.ensureIndex(DBObject("status" -> 1, "expireAfterSeconds" -> 120))