我在Node.js
和MongoDB
中构建了一个应用程序,并且该应用程序具有time-valid data
,这意味着如果某些数据被插入到数据库中。
我希望在三天后(或通过任何数量的天/时间传播)将其从数据库中删除(通过代码)。
目前,我的解决方案是让我的Schema
中有某种成员检查实际发布的时间,然后在当前时间超过插入后3天将其删除,但我是难以找到一种在代码中编写代码的好方法。
有没有标准的方法来完成这样的事情?
答案 0 :(得分:1)
使用TTL索引有两种基本方法可以实现此目的。 TTL索引将允许您在BSON日期字段上定义特殊类型的索引,该字段将根据年龄自动删除文档。首先,您需要在文档中包含BSON日期字段。如果你没有,那就不行了。 http://docs.mongodb.org/manual/reference/bson-types/#document-bson-type-date
然后,您可以在达到特定年龄后删除所有文档,也可以在插入文档时设置文档的到期日期。
对于第一种情况,假设您想在1小时后删除文档,您将创建此索引:
db.mycollection.ensureIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )
假设您有一个日期类型的createdAt字段。一旦它们达到3600秒(或1小时),MongoDB将负责删除集合中的所有文档。
对于第二种情况,您将在不同的字段上创建一个expireAfterSeconds设置为0的索引:
db.mycollection.ensureIndex( { "expireAt": 1 }, { expireAfterSeconds: 0 } )
如果您随后插入一个expireAt字段设置为日期的文档,mongoDB将在该日期和时间删除该文档:
db.mycollection.insert( {
"expireAt": new Date('June 6, 2014 13:52:00'),
"mydata": "data"
} )
您可以在此处阅读有关如何使用TTL索引的更多详细信息: