NodeJS和MongoDB堆栈的并发控制

时间:2016-05-29 23:50:06

标签: node.js mongodb

我有这些"任务"由用户提交的,这些用户访问我的NodeJS服务器并存储为MongoDB数据库中的文档。然后,这些任务也由用户提取并一次处理一个。

  • 任务有状态:待处理,正在工作,已完成
  • 最初提交任务时,他们处于"待定"状态。
  • 当用户想要处理任务时,他们会查询一个"待定"以FIFO方式完成任务。
  • 在向用户提供任务后,该任务将更新为具有状态" Working"

我的问题是,当两个用户同时要求执行任务时,由于竞争条件,他们可能会获得相同的任务。第一个查询尝试将任务的状态更新为" Working"第二个查询也可以获取该查询。有人可以建议我如何使用NodeJS和MongoDB来解决这个问题,其中一切都是异步的吗?任何框架或库也都受到欢迎。

1 个答案:

答案 0 :(得分:0)

MongoDB完全有findAndModify方法用于此目的。

使用MongoDB驱动程序,您将运行以下代码,

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