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

mongodb update document at given time intervals

本文关键字:更新 文档 时间 mongodb      更新时间:2023-09-26

我正在实现一个"最低出价拍卖"系统。用户将设置基本价格、降价金额和降价间隔。例如,如果用户设置的基本价格=1000$,降价金额=100$,降价间隔=1小时,3小时后价格将为700$,3.2小时后价格仍为700$、4小时后价格为600$。。。

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

谢谢,Matteo

如果您使用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任务-然而,这个查询将与你的应用程序的其他部分在同一个进程上运行,所以根据你降价的"产品"对象的数量,这可能是个问题,也可能不是个问题。