Working with Transactions

1. Starting Transaction

APIForm
Coresession.startTransaction(opts)
Callbacksession.withTransaction(async () => {...}) (auto-retry)

2. Committing Transaction

MethodDetail
commitTransaction()Atomic apply across all docs
RetryableDrivers auto-retry on transient errors

3. Aborting Transaction

MethodDetail
abortTransaction()Discard all uncommitted ops
Implicit abortOn unhandled exception in withTransaction

4. Using Transaction Options

OptionDefault
readConcernsnapshot
writeConcernmajority
readPreferenceprimary
maxCommitTimeMSOverride max commit duration

5. Handling Transaction Errors

LabelMeaning
TransientTransactionErrorRetry entire transaction
UnknownTransactionCommitResultRetry commit
WriteConflictMost common transient

6. Implementing Retry Logic

PatternDetail
withTransactionBuilt-in retry with backoff (recommended)
ManualCheck errorLabels for TransientTransactionError
Max timeServer kills txn after 60s (txnLifetimeLimitSeconds)
await session.withTransaction(async () => {
  await db.accounts.updateOne({_id: a}, {$inc:{balance:-100}}, {session});
  await db.accounts.updateOne({_id: b}, {$inc:{balance: 100}}, {session});
}, { readConcern: { level: "snapshot" }, writeConcern: { w: "majority" } });

7. Using Multi-Document Transactions

ScopeSupported
Replica setSince 4.0
Sharded clusterSince 4.2
Multiple collectionsYes
Cross-DBYes

8. Understanding Transaction Limitations

LimitationDetail
60s lifetimetxnLifetimeLimitSeconds
16MB oplog entryLimits total txn write size
No DDL Relaxed in 4.4+Some collection creation in txn supported
No $out / $mergeCannot output stages

9. Setting Transaction Timeout

SettingDefaultScope
transactionLifetimeLimitSeconds60sServer-wide
maxCommitTimeMSNonePer txn

10. Using Callback API for Transactions

BenefitDetail
Auto-retryTransient errors handled
Auto-commitCallback success → commit; exception → abort
RecommendedUse over manual start/commit

11. Understanding Transaction Performance

AspectImpact
LocksDocument-level; conflicts → WriteConflict
SnapshotHolds storage snapshot for txn duration
CostAvoid for high-throughput single-doc updates
TipEmbed related data to avoid needing txn at all