mongodb可以自动移植收藏吗?

时间:2014-08-17 17:48:32

标签: mongodb collections

我听说,mongo可以做到,但我无法找到。 mongo可以创建集合,将来可以自动移植,我可以设置吗?或者Mongo无法做到这一点?

2 个答案:

答案 0 :(得分:1)

mongodb无法自动删除集合,但可以自动删除BSON记录。您只需要在BSON记录中存在的日期字段上设置ttl(生存时间)索引。 您可以在此处阅读更多内容MongoDb: Expire Data from Collections by Setting TTL

答案 1 :(得分:0)

在第一次写入操作(insert,upsert,index creation)上自动创建集合。所以这个魔术就被覆盖了。

如果删除时间取决于时间,您可以使用cronat来运行此小脚本

mongo yourDBserver/yourDB --eval 'db.yourCollection.drop()’

Sammaye指出,创建指数是一项代价高昂的操作。我认为你的数据模型有问题。对于语义区分文档,我宁愿在它们上创建一个字段来执行该操作,并设置过期日期或创建日期和文档有效的时间范围,并使用TTL索引删除所有这些文档。 / p>

要使用到期日期,您必须将字段设置为ISODate并创建没有持续时间的TTL索引:

db.yourColl.ensureIndex({"yourExpirationDateField":1},{expireAfterSeconds:0})

如果您希望文档在创建后的一周内有效,请使用以下内容:

db.yourColl.ensureIndex({"yourCreationDate":1},{expireAfterSeconds:604800})

无论哪种方式,都会发生以下情况:每隔一分钟,一个名为TTLMonitor的后台线程被唤醒,获取服务器的所有TTL索引并开始处理它们。它扫描TTL索引,查找日期值,添加为" expireAfterSeconds"并删除目前已确定无效的所有文件。这个过程需要一些时间,所以不要期望文档在它们到期的那一刻被删除。

这种方法的一大优势是:您不需要维护任何触发逻辑,删除操作在后台自动完成,您不会对应用程序施加任何负担。此外,使用到期日期,您可以非常精细地控制文档何时到期。

缺点是......嗯,如果我想找到一个,你必须为每个文件插入一个创建日期或计算并插入一个到期日期。并且你必须在应用程序生命周期内向mongod / mongos发送一次管理命令......