删除MongoDB中超过10分钟的记录?

use*_*157 4 mongodb node.js

我是Node js和MongoDB的新手(来自SQL背景).我正在尝试实现一个函数,删除时间戳超过10分钟的集合'journeys'中的所有记录.这是我到目前为止所做的:

connection.open(function(err, connection) {
    var database = connection.db(DATABASE);
    database.collection(JOURNEY_COLLECTION, {}, function(err, journeys) {
        var now = new Date().getTime() / 1000 - 10 * 60;
        journeys.remove({timestamp : ???}, function(err, result) {
            if(err != null)
                console.log('A refresh error occurred');
            connection.close();
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

我是在正确的轨道上吗?我应该怎么代替"???" ?

Rik*_*kus 9

我确定有人会发布一个使用示例代码的答案,但我将向您展示如何在数据库级别上执行此操作.

首先,定义一个包含Date的字段.这可以是创建时间(方法A),也可以是想要删除的时间(方法B).我会解释两者,但方法B是我最喜欢的.它可以让您更轻松地修改生存时间.日期设置为的字段null将不会被删除.

方法A:

var someDocument = { "created": new Date() };
Run Code Online (Sandbox Code Playgroud)

方法B:

var someDocument = { "expire": new Date(Date.now() + 10 * 60 * 1000) };
Run Code Online (Sandbox Code Playgroud)

在此字段上添加TTL索引,如下所示:

方法A:

db.myCollection.ensureIndex( { "created": 1 }, { expireAfterSeconds: 600 } )
Run Code Online (Sandbox Code Playgroud)

方法B:

db.myCollection.ensureIndex( { "expire": 1 }, { expireAfterSeconds: 0 } )
Run Code Online (Sandbox Code Playgroud)

MongoDB每60秒运行一次作业,查找应删除的文档.由于这个原因,您可能会得到稍微陈旧的文档.

(请注意,我已将字段命名为'created'(方法A)/'expire'(方法B),您可以将它们命名为任何内容,但我认为这比这些示例的'timestamp'更具描述性)