我听说,mongo可以做到,但我无法找到。 mongo可以创建集合,将来可以自动移植,我可以设置吗?或者Mongo无法做到这一点?
答案 0 :(得分:1)
mongodb无法自动删除集合,但可以自动删除BSON记录。您只需要在BSON记录中存在的日期字段上设置ttl(生存时间)索引。 您可以在此处阅读更多内容MongoDb: Expire Data from Collections by Setting TTL
答案 1 :(得分:0)
在第一次写入操作(insert,upsert,index creation)上自动创建集合。所以这个魔术就被覆盖了。
如果删除时间取决于时间,您可以使用cron或at来运行此小脚本
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发送一次管理命令......