我试图使用Casbah的ensureIndex API在Mongo中使一个集合到期。
基于此文件 http://docs.mongodb.org/manual/tutorial/expire-data/
我正在使用casbah提出的ensureIndex API
collection.ensureIndex(DBObject("status" -> 1, "expireAfterSeconds" -> 120))
在2分钟内过期收藏......
该集合未被驱逐或过期。
我在这里错过了什么吗?
由于
答案 0 :(得分:3)
有几件事需要检查:
status
字段上创建一个在文档中实际不存在的索引? (必须至少问... )status
字段是否包含JUST dates
?它理论上可以混合,但只考虑具有日期类型的文档到期。要从控制台运行检查索引: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))