在MongoDB上过期时自动删除文档

时间:2014-02-10 23:44:20

标签: php mongodb

我正在开发一个PHP应用程序,它将历史日志存储在MongoDB集合中。

1小时后,这些数据并不重要,并且会被每小时运行的CRON进程删除。

问题是,是否有其他解决方案可以在插入一段时间后自动删除这些文件?

非常感谢!

1 个答案:

答案 0 :(得分:2)

要在一定秒数后使文档过期,您可以创建一个特殊索引属性的TTL索引,该属性依赖于mongod中的后台线程,该后台线程读取目标索引日期值并对已过期的人执行删除操作。

要执行此操作,您需要一个createdAt字段,用于在日志集合中存储插入日期,例如,您可以使用" new Date()“

要为集合启用TTL,请使用ensureIndex()方法创建具有expireAfterSeconds附加属性的索引。

db.log.ensureIndex({" createdAt":1},{expireAfterSeconds:3600})

此语句将创建一个TTL索引,当createdAt值早于createdAt值+ expireAfterSeconds值(3600 = 60secs * 60分钟)时,MongoDB将自动从日志集合中删除文档。

删除过期文档的后台任务每60秒运行一次

我还建议您查看以下文章,该文章准确说明了整个过程:http://mongodbspain.com/en/2014/02/08/expire-data-from-collections-using-ttl/

问候。