【问题标题】: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 任务 - 但是此查询将在与应用程序的其余部分相同的进程上运行,因此取决于有多少“产品”您正在降低价格的对象,这可能是也可能不是问题。