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



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

我讲对了吗?我应该用什么来代替"??"div ?

我相信有人会发布一个使用示例代码的答案,但我将向您展示如何在数据库级别上做到这一点。

首先,定义一个包含Date的字段。这可以是创建时间(方法A),也可以是您想要删除它的时间(方法B)。我将解释这两种方法,但方法B是我最喜欢的。它可以让你更容易地调整生活时间。日期设置为null的字段不会被删除。

方法:

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

方法B :

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

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

方法:

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

方法B :

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

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

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

你做对了。

你的"?"应在 {$ lt: varName}

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

最新更新