javascript - Node.js 中的时间敏感数据

标签 javascript node.js mongodb

我正在使用 Node.jsMongoDB 构建一个应用程序,并且该应用程序具有一些时间有效的数据,这意味着如果一些数据被插入到数据库中。

我想在三天(或任意天数/时间间隔)后将其从数据库中删除(通过代码)。

目前,我的解决方案是在我的 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 索引的更多详细信息:

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

关于javascript - Node.js 中的时间敏感数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23760620/

相关文章:

javascript - 忽略重音字符的 string.search()?

javascript - 选择其属性类似于兄弟组件属性 [选择器] 的元素

node.js - 当我运行 'npm run build' 、 'npm run start' 时组件缺少类,但其他人无法重现该错误

node.js - NodeJS/Mongoose/MongoDB - 拉(从数组中)不起作用

python - MongoDB Map/Reduce 引发异常 : failed: db assertion failure

javascript - Esc 键关闭 bootstrap 模式但不关闭其中的 select2 下拉菜单

C# 中来自 SQL Server 的 JavaScript 数组数据

node.js - 设置用于开发的 Angular 通用应用程序

node.js - Express.js + Facebook

java - 使用 Java 进行 MongoDB ISODate 字段搜索