在 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中默认没有条件事务回滚
我想在我的 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中默认没有条件事务回滚