Mongodb锁收集直到设置标志为止?

j91ykkif  于 2023-03-17  发布在  Go
关注(0)|答案(2)|浏览(101)

我有一个预先填充了生成的id的简单集合。

|task_id| used|
|      1| true|
|      2|false|
|      3|false|

这个想法是我有一个简单的方法,返回nexttask_id. getNextTaskId(),设置used为true并返回task_id。但是这个方法可能有并发调用。我如何锁定集合以防止方法返回相同的task_id两次,并防止更新used为true两次或更多(对于相同的task_id)?

ars1skjm

ars1skjm1#

MongoDB不提供“锁收集”操作,因为数据库是为并发性(和伸缩性)而设计的,而锁阻止了这两种情况。提供了各种其他策略来满足各种用例。
参见:

  • MongoDB对同一文档的并发更新不是原子行为
  • MongoDB -集合的悲观锁定
  • 如何锁定pymongo集合的阅读?

等等。
如果你需要一个队列,使用你的语言中的队列库。

zvokhttg

zvokhttg2#

我认为,这种情况下最合适的方法是使用复合运算
例如,您可以使用类似以下的代码:

db.tasks.findOneAndUpdate({"used": {$ne: true}}, {$set: {"used": true}})

实施:

相关问题