在嵌套的MongoDB调用中,如何确保原子性



是否可以通过在第一次更新的回调中调用新的更新/删除调用来原子地更新/删除MongoDB中的两个文档?在下面的情况下,我想从集合中删除第二个文档,但前提是第一个文档的更新成功:

db.collection.update(conditions1, {$set: set}, function (err,result){
    db.collection.remove(conditions2, function(err,doc_num){      
        db.close();
    )};
});

我遇到了$isolated查询运算符,但根据我在文档中的理解,该运算符用于对影响多个文档的单个查询执行读/写锁定,而不是在通过第一个文档更新的回调对另一个文档执行更新后对一个文档执行读/写锁,这正是我想要尝试实现的。

不可能,因为。如本文所述,锁定将在单个查询上获得,而不是在整个事务上获得。

使用这个可以克服原子性问题。

正如Amir所说,这是不可能的,但您可以通过遵循两阶段提交模式来模仿mongo中的行为。该链接还链接到如何执行类似回滚的操作。

最新更新