我有一个预先填充了生成的id的简单集合。
|task_id| used| | 1| true| | 2|false| | 3|false|
这个想法是我有一个简单的方法,返回nexttask_id. getNextTaskId(),设置used为true并返回task_id。但是这个方法可能有并发调用。我如何锁定集合以防止方法返回相同的task_id两次,并防止更新used为true两次或更多(对于相同的task_id)?
getNextTaskId()
ars1skjm1#
MongoDB不提供“锁收集”操作,因为数据库是为并发性(和伸缩性)而设计的,而锁阻止了这两种情况。提供了各种其他策略来满足各种用例。参见:
等等。如果你需要一个队列,使用你的语言中的队列库。
zvokhttg2#
我认为,这种情况下最合适的方法是使用复合运算。例如,您可以使用类似以下的代码:
db.tasks.findOneAndUpdate({"used": {$ne: true}}, {$set: {"used": true}})
实施:
2条答案
按热度按时间ars1skjm1#
MongoDB不提供“锁收集”操作,因为数据库是为并发性(和伸缩性)而设计的,而锁阻止了这两种情况。提供了各种其他策略来满足各种用例。
参见:
等等。
如果你需要一个队列,使用你的语言中的队列库。
zvokhttg2#
我认为,这种情况下最合适的方法是使用复合运算。
例如,您可以使用类似以下的代码:
实施: