Introduction
Transactions and atomic document writes help keep your data safe and correct when many changes happen at once.
Jump into concepts and practice - no test required
/* Atomic document write example */ db.collection.updateOne({ _id: 1 }, { $set: { field: 'value' } }) /* Transaction example */ const session = client.startSession(); await session.withTransaction(async () => { await db.collection1.updateOne({ _id: 1 }, { $set: { field: 'value1' } }, { session }); await db.collection2.updateOne({ _id: 2 }, { $set: { field: 'value2' } }, { session }); });
db.users.updateOne({ _id: 123 }, { $set: { name: 'Alice' } })const session = client.startSession(); await session.withTransaction(async () => { await db.orders.updateOne({ _id: 1 }, { $set: { status: 'shipped' } }, { session }); await db.inventory.updateOne({ _id: 10 }, { $inc: { stock: -1 } }, { session }); });
const session = client.startSession(); try { session.startTransaction(); await db.accounts.updateOne({ _id: 'A' }, { $inc: { balance: -100 } }, { session }); await db.accounts.updateOne({ _id: 'B' }, { $inc: { balance: 100 } }, { session }); await session.commitTransaction(); console.log('Transaction committed'); } catch (error) { await session.abortTransaction(); console.log('Transaction aborted'); } finally { session.endSession(); }
const session = client.startSession();
session.startTransaction();
try {
await collection.updateOne({ _id: 1 }, { $set: { value: 10 } }, { session });
await collection.updateOne({ _id: 2 }, { $set: { value: 20 } }, { session });
await session.commitTransaction();
} catch (e) {
await session.abortTransaction();
}const session = client.startSession();
session.startTransaction();
await collection.updateOne({ _id: 1 }, { $set: { value: 10 } });
await session.commitTransaction();
session.endSession();