0

我正在尝试使用 Casbah 的 ensureIndex API 使 Mongo 中的集合过期。

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

我正在使用 casbah 提出的 ensureIndex API

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

在 2 分钟内使集合过期...

该集合没有被驱逐或过期。

我在这里还缺少什么吗?

谢谢

4

2 回答 2

3

有几件事需要检查:

  1. status您是否只是将文档跟踪到 T 并尝试在文档中实际不存在的字段上创建索引?(至少得问...
  2. status字段是否包含 JUST dates?理论上可以混合使用,但只有具有日期类型的文档才会被考虑过期。
  3. 您是否检查过您的收藏索引以确保索引已正确创建?

要从控制台检查索引,请运行:db.collection.getIndexes(). 如果索引创建成功,请仔细检查您status的文档中是否有相应的字段以及它们是否是正确的日期。

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

另请注意,来自文档:

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

因此,如果您有120 second过期,请记住,文档可能会保留120 seconds最多179 seconds、 给予或接受,具体取决于文档过期的时间和后台任务的最后运行时间。

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

于 2013-08-16T05:34:39.327 回答
0

我认为,您以错误的方式传递选项。

它应该是-

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

代替-

collection.ensureIndex(DBObject("status" -> 1, "expireAfterSeconds" -> 120))
于 2016-02-08T12:15:52.377 回答