How does MongoDB handle transactions?

Answer

MongoDB added multi-document ACID transactions in version 4.0 (for replica sets) and 4.2 (for sharded clusters). Before this, only single-document operations were atomic. Single-document atomicity: MongoDB has always provided atomic operations on a single document — all fields in a document update atomically. This covers many use cases if data is well-modeled (use embedded documents). Multi-document transactions: for operations spanning multiple documents/collections. Use like a traditional database transaction. Session-based: const session = client.startSession(); session.startTransaction(); try { await users.insertOne({ name: "Alice" }, { session }); await orders.insertOne({ userId: aliceId }, { session }); await session.commitTransaction(); } catch(e) { await session.abortTransaction(); } finally { session.endSession(); }. ACID guarantees: Atomicity (all or nothing), Consistency (constraints enforced), Isolation (read concern "snapshot" — reads a consistent snapshot), Durability (write concern "majority" for durability). Performance considerations: transactions add overhead vs non-transactional operations — MongoDB uses multi-version concurrency control (MVCC). Transactions have a 60-second timeout by default. Keep transactions short. Best practice: first redesign schema to use single-document operations (embedding) — use transactions as a last resort when schema can't be restructured. MongoDB recommends using transactions for multi-document writes that require atomicity.