mongodb以给定的时间间隔更新文档

时间:2015-11-12 22:23:31

标签: javascript node.js mongodb

我正在实施“最低出价拍卖”系统。用户将设置基本价格,价格下降金额和价格下降间隔。例如,如果用户设置基本价格= 1000 $,价格下降金额= 100美元,价格下降间隔= 1小时,3小时后价格将是700美元,3.2小时后价格仍然是700美元,4小时后这将是600美元......

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

谢谢你, 利玛

1 个答案:

答案 0 :(得分:2)

如果你正在使用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();
});

就是这样。如果你正在使用快递并把它放在你的快递应用程序中,那么你不需要运行一个单独的cron任务 - 但是这个查询将在与你的应用程序的其余部分相同的进程上运行,所以取决于如何很多"产品"你正在降低价格的对象,这可能是也可能不是问题。