【问题标题】:mongodb update document at given time intervalsmongodb 在给定的时间间隔更新文档
【发布时间】:2015-11-12 22:23:30
【问题描述】:

我正在实施“最低出价拍卖”系统。用户将设置底价、降价量和降价区间。比如用户设置底价=1000$,降价量=100$,降价间隔=1小时,3小时后价格为700美元,3.2小时后价格仍为700美元,4小时后这将是 600 美元...

这些价​​格存储在 mongodb 数据库中,需要查询,因此在数据库查询之后在 node.js 中计算当前价格非常昂贵。有没有办法告诉 mongodb 在给定的时间间隔更新每个文档?我是否应该实现一个 node.js 微服务来跟踪所有这些计时器,并在需要时更新文档? 在实践中,这些时间实际上会很长(通常是几个小时),但我想跟踪其中的很多时间。

谢谢你, 马特奥

【问题讨论】:

    标签: javascript node.js mongodb


    【解决方案1】:

    如果您使用的是 nodejs,您可以使用 Agenda 来执行此操作:https://github.com/rschmukler/agenda

    因此您需要定义一项任务来降低所有商品的价格:

    var mongoConnectionString = "mongodb://127.0.0.1/agenda";
    var agenda = new Agenda({db: {address: mongoConnectionString}});
    
    agenda.define('reduce prices', {priority: 'high', concurrency: 1}, function(job, done) {
      // .. do your db query to reduce the price here
      done(); // dont forget to call done!
    });
    

    然后每小时调用一次:

    agenda.on('ready', function() {
      agenda.every('60 minutes', 'reduce prices');
      agenda.start();
    });
    

    就是这样。如果您使用 express 并将其放在您的 express 应用程序中,那么您不需要运行单独的 cron 任务 - 但是此查询将在与应用程序的其余部分相同的进程上运行,因此取决于有多少“产品”您正在降低价格的对象,这可能是也可能不是问题。

    【讨论】:

      猜你喜欢
      • 2017-08-18
      • 2018-03-30
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 2023-04-10
      相关资源
      最近更新 更多