如何在快速js服务器中删除超过24小时的mongoose文件?

时间:2018-01-14 12:46:12

标签: node.js mongodb express mongoose

我编写了一个使用ExpressJS服务器和mongoose处理MongoDB的应用程序。

我将从外部传感器接收一些测量值,我将它们存储在数据库中。我将仅使用过去24小时的测量结果。

有没有办法以某种方式自动删除Mongo超过24小时的文件?每个测量文档都有一个名为createdAt的字段,其中包含创建日期的确切日期。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以在集合中的createdOnaddedOn等日期字段上使用生存时间(TTL)索引,其中包含到期秒数,您插入的偶数文档应包含当前系统时间的此字段new Date()

文件将在后台自动到期后删除

TTL index

在日期字段上创建索引

> 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()
>