在 mongodb 中保持原子性

Maintain atomicity in mongodb

我想在我的 mongodb 数据库中保持原子性,如果我在我的文档中更新一个数组,如果它成功,那么另一个文档将被更新,否则如果任何文档失败,那么没有文档应该被更新.

我无法理解如何在我的 nodejs 应用程序中使用 mongoClient 来实现它。

secureRoutes.post("/sendrequest", function (req, res) {
        MongoClient.connect(url, function (err, db) {
            if (err) throw err;
            else{
            db.collection('users').updateOne({_id:req.user['sub']},{$addToSet:{requested:req.body.id}},function(update1Err,update1Data){
                if (updateErr) throw updateErr;
                else {
                     db.collection('users').updateOne({_id:req.body.id},{$addToSet:{pending:req.user['sub']}});
                }
            });
           
            res.send(JSON.stringify(req.body.id));
            }
        });
        
});

因此,如果第一个查询失败,那么第二个查询不会 运行 并且将保持原子性,但如果第一个查询执行而第二个查询失败,则不会保持原子性。

帮助我理解正确的实现。 谢谢

检查此 link 以进行 mongodb 交易。我想这就是你需要的。

https://docs.mongodb.com/manual/core/write-operations-atomicity/

您必须使用 mongodb 的两阶段提交来处理事务的回滚。这是文档的link,请参阅回滚部分

https://docs.mongodb.com/manual/tutorial/perform-two-phase-commits/

在mongodb中默认没有条件事务回滚