我正在编写一个使用 ExpressJS 服务器和 mongoose 来处理 MongoDB 的应用程序。
我将从外部传感器接收一些测量值,并将它们存储在数据库中。我将仅使用过去 24 小时的测量值。
有没有办法以某种方式自动从 Mongo 中删除超过 24 小时的文档?每个测量文档都有一个名为 createdAt
的字段,其中包含创建它的确切日期。
谢谢!
最佳答案
您可以在日期字段上使用生存时间 (TTL) 索引,例如 createdOn
或 addedOn
在您的集合中使用过期秒数,您插入的每个文档都应该有此字段包含当前系统时间 new Date()
文件过期秒后会在后台自动删除
在日期字段上创建索引
> db.sensor.ensureIndex({'addedOn' : 1} , { expireAfterSeconds: 24*60*60 // 1 day})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
索引
> db.sensor.getIndexes()
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.sensor"
},
{
"v" : 2,
"key" : {
"addedOn" : 1
},
"name" : "addedOn_1",
"ns" : "test.sensor",
"expireAfterSeconds" : 86400
}
]
>
示例(20 秒后过期)
插入集合
> db.sensor.insert({machineId : 'dc-rack123-1243', addedOn : new Date()})
WriteResult({ "nInserted" : 1 })
>
系统时间
> new Date()
ISODate("2018-01-14T14:05:18.008Z")
>
文档
> db.sensor.find()
{ "_id" : ObjectId("5a5b639942005c0824b9c983"), "machineId" : "dc-rack123-1243", "addedOn" : ISODate("2018-01-14T14:05:13.064Z") }
>
20 多秒后,文档从集合中删除
> new Date()
ISODate("2018-01-14T14:08:39.436Z")
> db.sensor.find()
>
关于node.js - 如何删除 express js 服务器中超过 24 小时的 Mongoose 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48249724/