我有100多个工作线程,这些线程将轮询数据库以寻找新工作。
要执行一项工作,一个线程需要将一堆文档的状态从NEW
更改为IN_PROGRESS
,因此没有其他线程可以窥视相同的工作。
在PostgreSQL中使用SELECT FOR UPDATE SKIP LOCKED WHERE status = "NEW"
语句可以很好地解决此问题。
在MongoDB中是否可以为单个文档进行这种原子更新?要一批吗?
答案 0 :(得分:1)
有一个findAndModify
方法,其功能与您针对单个文档所描述的完全一样。
对于一批产品,目前无法实现,
在MongoDB中,执行写操作,例如
db.collection.update()
,db.collection.findAndModify()
,db.collection.remove()
,在单个文档级别是原子的。
但是在MongoDB 4.0中,transactions才有可能。