ACID-транзакции в MongoDB гарантируют, что несколько операций на разных коллекциях выполняются атомарно — либо все успешны, либо ничего не применяется. Это требует MongoDB 4.0+ с replica set или sharded cluster.
client.startSession()session.startTransaction()session в каждую операцию, которая должна быть частью транзакцииconst session = client.startSession();
session.startTransaction();
try {
db.collection1.insertOne({ name: "Alice" }, { session });
db.collection2.updateOne(
{ name: "Bob" },
{ $set: { balance: 100 } },
{ session }
);
await session.commitTransaction();
} catch (error) {
await session.abortTransaction();
} finally {
session.endSession();
}
commitTransaction() — вызывается в блоке try когда все операции успешны, делая изменения постояннымиabortTransaction() — вызывается в блоке catch при любой ошибке, атомарно откатывая все измененияendSession() — всегда вызывается в finally чтобы освободить ресурсы, независимо от результатаMongoDB ACID транзакции требуют передачи одного и того же объекта session каждой операции, которая должна быть включена в транзакцию; операции без параметра session будут выполняться вне области транзакции.
Новый — ещё не проверен сообществом
Вы