我正在使用 Node.js
和 MongoDB
构建一个应用程序,并且该应用程序具有一些时间有效的数据
,这意味着如果一些数据被插入到数据库中。
我想在三天(或任意天数/时间间隔)后将其从数据库中删除(通过代码)。
目前,我的解决方案是在我的 Schema
中添加某种成员,用于检查它的实际发布时间,并随后在当前时间距插入时间超过 3 天时将其删除,但我'我无法找到用代码编写它的好方法。
是否有任何标准方法可以完成这样的事情?
最佳答案
使用 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 索引的更多详细信息:
关于javascript - Node.js 中的时间敏感数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23760620/