| name | mongodb-transactions |
| version | 2.1.0 |
| description | Master MongoDB ACID transactions for multi-document operations. Learn session management, transaction mechanics, error handling, and production patterns. Guarantee data consistency across multiple operations. |
| sasmp_version | 1.3.0 |
| bonded_agent | 07-mongodb-application-development |
| bond_type | PRIMARY_BOND |
| capabilities | ["session-management","multi-document-transactions","retry-logic","error-recovery","consistency-guarantees"] |
| input_validation | {"required_context":["operations_list","consistency_requirement"],"optional_context":["read_concern","write_concern","timeout_ms"]} |
| output_format | {"transaction_code":"string","session_handling":"string","error_handling":"string","retry_logic":"string","rollback_procedure":"string"} |
| error_handling | {"common_errors":[{"code":"TXN001","condition":"TransientTransactionError","recovery":"Retry entire transaction with exponential backoff"},{"code":"TXN002","condition":"UnknownTransactionCommitResult","recovery":"Check operation idempotency, verify state before retry"},{"code":"TXN003","condition":"Transaction timeout","recovery":"Increase maxTransactionLockRequestTimeoutMillis or optimize operations"}]} |
| prerequisites | {"mongodb_version":"4.0+ (replica set), 4.2+ (sharded)","required_knowledge":["crud-operations","session-basics"],"deployment_requirements":["Replica set or sharded cluster","Not available on standalone or M0 Atlas"]} |
| testing | {"unit_test_template":"// Test transaction with rollback\nconst session = client.startSession()\ntry {\n await session.withTransaction(async () => {\n await collection1.insertOne(doc1, { session })\n await collection2.insertOne(doc2, { session })\n })\n // Verify both inserted\n} catch (error) {\n // Verify neither inserted (rollback)\n} finally {\n await session.endSession()\n}\n"} |
MongoDB Multi-Document Transactions
Guarantee consistency with ACID transactions across multiple operations.
Quick Start
Basic Transaction
const session = client.startSession()
try {
await session.withTransaction(async () => {
await users.insertOne({ name: 'John' }, { session })
await accounts.insertOne({ userId: 'xxx', balance: 100 }, { session })
})
} catch (error) {
console.error('Transaction failed:', error)
} finally {
await session.endSession()
}
Real-World: Money Transfer
async function transferMoney(fromId, toId, amount) {
const session = client.startSession()
try {
await session.withTransaction(async () => {
await accounts.updateOne(
{ _id: fromId },
{ $inc: { balance: -amount } },
{ session }
)
accounts.(
{ : toId },
{ : { : amount } },
{ session }
)
})
} (error) {
.(, error)
} {
session.()
}
}