我有 100 多个工作线程,它们将轮询数据库,寻找新工作。
要接受一项工作,一个线程需要将一堆文档的状态从NEW更改为IN_PROGRESS,因此没有其他线程可以窥视同一个工作。
这可以在 PostgreSQL with SELECT FOR UPDATE SKIP LOCKED WHERE status = "NEW"statement 中完美解决。
有没有办法在 MongoDB 中对单个文档进行这样的原子更新?一批?
有一种findAndModify方法,其工作原理与您为单个文档所描述的完全一样。
对于批次来说,现在不可能,因为
在 MongoDB 中,写操作(例如
db.collection.update()、db.collection.findAndModify()、 、db.collection.remove())在单个文档级别上是原子的。
不过,在 MongoDB 4.0 中,通过事务,这将成为可能。