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

时间:2014-08-18 15:36:17

标签: node.js mongodb

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

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

我是否在正确的轨道上?我该怎样代替" ???" ?

2 个答案:

答案 0 :(得分:9)

我确定有人会发布使用示例代码的答案,但我会告诉您如何在数据库级别上执行此操作。

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

方法A

var someDocument = { "created": new Date() };

方法B

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

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

方法A

db.myCollection.ensureIndex( { "created": 1 }, { expireAfterSeconds: 600 } )

方法B

db.myCollection.ensureIndex( { "expire": 1 }, { expireAfterSeconds: 0 } )

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

(请注意,我已将该字段命名为'(方法A)/'到期'(方法B),除了我,您可以为它们命名认为这比这些示例的时间戳更具描述性

答案 1 :(得分:3)

你走在正确的轨道上。

你的" ???"应采用 {$ lt:varName}

的形式
var tenMinutesOld = new Date()
tenMinutesOld.setMinutes(tenMinutesOld.getMinutes()-10)
journeys.remove({timestamp: {$lt:tenMinutesOld}}, function(err, result) {