Introduction
Multi-document transactions let you change many pieces of data at once, and make sure all changes happen together or none at all. This keeps your data safe and correct.
const session = client.startSession(); session.startTransaction(); try { // your operations here await session.commitTransaction(); } catch (error) { await session.abortTransaction(); } finally { session.endSession(); }
const session = client.startSession(); session.startTransaction(); try { await collection1.insertOne({name: 'Alice'}, {session}); await collection2.updateOne({name: 'Bob'}, {$inc: {score: 10}}, {session}); await session.commitTransaction(); } catch (e) { await session.abortTransaction(); } finally { session.endSession(); }
const session = client.startSession(); session.startTransaction(); try { await accounts.updateOne({user: 'John'}, {$inc: {balance: -100}}, {session}); await accounts.updateOne({user: 'Jane'}, {$inc: {balance: 100}}, {session}); await session.commitTransaction(); } catch (e) { await session.abortTransaction(); } finally { session.endSession(); }
const { MongoClient } = require('mongodb'); async function run() { const client = new MongoClient('mongodb://localhost:27017'); await client.connect(); const db = client.db('bank'); const accounts = db.collection('accounts'); // Prepare accounts await accounts.deleteMany({}); await accounts.insertMany([ { user: 'Alice', balance: 500 }, { user: 'Bob', balance: 300 } ]); const session = client.startSession(); try { session.startTransaction(); // Alice sends 200 to Bob await accounts.updateOne({ user: 'Alice' }, { $inc: { balance: -200 } }, { session }); await accounts.updateOne({ user: 'Bob' }, { $inc: { balance: 200 } }, { session }); await session.commitTransaction(); } catch (e) { await session.abortTransaction(); } finally { session.endSession(); } const results = await accounts.find().toArray(); console.log(results); await client.close(); } run();
multi-document transactions in MongoDB?startTransaction().const session = client.startSession();
session.startTransaction();
await collection1.insertOne({item: 'apple'}, {session});
await collection2.updateOne({item: 'banana'}, {$inc: {qty: 1}}, {session});
await session.commitTransaction();
session.endSession();
console.log('Transaction complete');
What will be printed if both operations succeed?const session = client.startSession();
session.startTransaction;
await collection.insertOne({name: 'John'}, {session});
await session.commitTransaction();
session.endSession(); What is the error and how to fix it?session.startTransaction without parentheses, so the function is not executed.session.startTransaction().accounts.balance and add 10 to transactions.amount. Which transaction code snippet correctly ensures both updates succeed or fail together?startTransaction() and commitTransaction() on the session.await on both update operations and passes the session option, ensuring atomicity.startTransaction(). const session = client.startSession();
session.startTransaction();
accounts.updateOne({user: 'A'}, {$inc: {balance: -10}}, {session});
transactions.updateOne({user: 'A'}, {$inc: {amount: 10}}, {session});
session.commitTransaction();
session.endSession(); misses await on operations.Pass the test and this pattern moves unknown