2016-05-29 88 views
0

我有这些“任务”是由用户提交的,这些任务打到我的NodeJS服务器并作为文档存储在MongoDB数据库中。这些任务也会被用户抓取并一次处理一个。NodeJS和MongoDB堆栈的并发控制

  • 任务有一定的状态:等待,工作,已完成
  • 最初任务提交时,他们是在“待定”状态。
  • 当用户想要处理任务时,他们以FIFO方式查询一个“待处理”任务。
  • 一旦给一个任务给用户,这项任务被更新为具有状态“工作”

我的问题是当两个用户同时请求一个任务上工作,他们可能会得到同样的任务,因为竞赛状况。当第一个查询尝试将任务状态更新为“正在工作”时,第二个查询也可以获取该状态。有人可以建议我如何使用NodeJS和MongoDB来解决这个问题吗?任何框架或库也受到欢迎。

回答

0

为了达到这个目的,MongoDB有一个findAndModify方法。

使用MongoDB的驱动程序,可以运行下面的代码,

collection.findAndModify({ 
    // Query 
}, [ 
    // Sort 
], { 
    $set: { 
    state: 'working' 
    } 
}, { 
    new: true 
}).then((task) => { 
    // This is your "working" task 
})