在 MongoDB 中选择更新跳过锁定

sil*_*box 5 mongodb

我有 100 多个工作线程,它们将轮询数据库,寻找新工作。

要接受一项工作,一个线程需要将一堆文档的状态从NEW更改为IN_PROGRESS,因此没有其他线程可以窥视同一个工作。

这可以在 PostgreSQL with SELECT FOR UPDATE SKIP LOCKED WHERE status = "NEW"statement 中完美解决。

有没有办法在 MongoDB 中对单个文档进行这样的原子更新?一批?

Rad*_*nik 4

有一种findAndModify方法,其工作原理与您为单个文档所描述的完全一样。

对于批次来说,现在不可能,因为

在 MongoDB 中,写操作(例如db.collection.update()db.collection.findAndModify()、 、db.collection.remove()在单个文档级别上是原子的

不过,在 MongoDB 4.0 中,通过事务,这将成为可能。