Node.js中的时间敏感数据

时间:2014-05-20 13:01:37

标签: javascript node.js mongodb

我在Node.jsMongoDB中构建了一个应用程序,并且该应用程序具有time-valid data,这意味着如果某些数据被插入到数据库中。

我希望在三天后(或通过任何数量的天/时间传播)将其从数据库中删除(通过代码)。

目前,我的解决方案是让我的Schema中有某种成员检查实际发布的时间,然后在当前时间超过插入后3天将其删除,但我是难以找到一种在代码中编写代码的好方法。

有没有标准的方法来完成这样的事情?

1 个答案:

答案 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索引的更多详细信息:

http://docs.mongodb.org/manual/tutorial/expire-data/