我编写了一个使用ExpressJS服务器和mongoose处理MongoDB的应用程序。
我将从外部传感器接收一些测量值,我将它们存储在数据库中。我将仅使用过去24小时的测量结果。
有没有办法以某种方式自动删除Mongo超过24小时的文件?每个测量文档都有一个名为createdAt
的字段,其中包含创建日期的确切日期。
谢谢!
答案 0 :(得分:1)
您可以在集合中的createdOn
或addedOn
等日期字段上使用生存时间(TTL)索引,其中包含到期秒数,您插入的偶数文档应包含当前系统时间的此字段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()
>