javascript - 是否有一种标准方法可以使用 Meteor 和 moment.js 在某个时间从集合中删除 Mongo 文档?

标签 javascript mongodb meteor ttl

我正在尝试找到一种更好的方法来确保在特定时间从 mongo 集合中删除某些文档,这对于每个文档都是唯一的。当项目被删除时,我还需要运行一些方法。我研究过 TTL 索引,但似乎它们不允许任何类型的回调,并且从我读到的内容来看,删除文档的过程每分钟只运行一次,这对于我的需要来说不够具体。以下是我的想法:

var check_frequency = 30000;
Meteor.setInterval((function() {
    // figure out what elements will expire within the next check period
    var next_check = moment().add(check_frequency, 'milliseconds');
    var next_string = next_check._d.toISOString();

    var ending_items = items.find({'time_to_end': {$lt : next_string}});

    ending_items.forEach(function(db_object) {
        var time_from_now = moment(db_object.time_to_end) - moment();
        Meteor.setTimeout(function() {
            removeAndReport(db_object._id);
        }, time_from_now);

    });
}), check_frequency);

我担心的是我不知道如何Meteor.setTimeout()与线程一起工作,所以如果我有数百或数千个这样的调用,我想知道它是否会导致问题。谁能推荐一种更好的方法来实现这一目标?

提前致谢。

编辑:使用 Meteor 或 cron 运行后台作业并不是我唯一关心的问题。我意识到我可以使用 cron 作业完成同样的事情,但我宁愿不每秒查询一次数据库,只找到 3 个过期的项目,而不是每 30 秒查询一次数据库,并找出哪些元素将在下一个时间段。

最佳答案

似乎更简单的解决方案是在每个文档中存储删除日期,而不是 TTL。想象一下,您有一个名为 Messages 的集合,并且每个文档都有一个 removeAt 字段。然后你可以执行如下操作:

var timeout = 500;
Meteor.setInterval((function() {
  // remove any messages that should have been removed in the past
  Messages.remove({removeAt: {$lte: new Date}});
}), timeout);

注释:

  1. 确保对 removeAt 建立索引,以便 remove 不需要扫描整个集合。
  2. 从技术上讲,如果它在多个服务器实例上运行,这不会中断,但理想情况下它只会在一个服务器实例上运行。也许它可以在自己的进程中运行。

关于javascript - 是否有一种标准方法可以使用 Meteor 和 moment.js 在某个时间从集合中删除 Mongo 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33657453/

相关文章:

javascript - 使用Angular中的 react 形式从字段动态?

javascript - 在哪里包含 JS 文件 - 这重要吗?

javascript - 第二次尝试时 react 函数松散状态

mongodb - 为什么 docker commit 没有将数据保存在我的 mongo 数据库容器中?

javascript - 使用 Node JS 和 MongoDB 过滤查询

javascript - meteor :Accounts.createUser() 不创建用户

javascript - jQuery NoUiSlider 不能使用最大值 10

javascript - 如何在 MongoDB 集合上循环文档并对每个文档执行发布请求?

javascript - 创建新的 Mongodb 文档与推送到文档数组

javascript - 在 Meteor 应用程序中实现 MongoDB 2.4 的全文搜索