Introduction

MongoDB transaction aborted due to write conflict when concurrent modifications overlap. This guide provides step-by-step diagnosis and resolution.

Symptoms

Typical error output:

bash
Error: WriteConflict
Write conflict during plan execution
Transaction aborted due to conflicting write

Common Causes

  1. 1.Concurrent transactions modifying same documents
  2. 2.Transaction timeout exceeded retry limit
  3. 3.Write conflict detection threshold too low
  4. 4.Long-running transactions holding locks

Step-by-Step Fix

Step 1: Check Current State

javascript
db.currentOp({lsid: {$exists: true}})
db.serverStatus().transactions
db.aggregate([{$currentOp: {localOps: true}}])

Step 2: Identify Root Cause

javascript
rs.status()
db.serverStatus()
db.currentOp()

Step 3: Apply Primary Fix

javascript
// Retry transaction with exponential backoff
const session = db.getMongo().startSession();
session.startTransaction();
try {
  // Perform operations
  session.commitTransaction();
} catch (e) {
  session.abortTransaction();
  // Retry logic
}

Step 4: Apply Alternative Fix

```javascript // Alternative fix: Check configuration rs.conf() db.adminCommand({getCmdLineOpts: 1})

// Update settings db.adminCommand({setParameter: 1, parameter: value})

// Verify the fix db.serverStatus().metrics ```

Step 5: Verify the Fix

javascript
db.serverStatus().transactions
// commit ratio should improve

Common Pitfalls

  • Not checking replica set status before operations
  • Using unbounded queries on large collections
  • Forgetting to create indexes for query patterns
  • Ignoring memory limits in aggregation pipelines

Best Practices

  • Monitor replication lag and oplog size
  • Create indexes to support common queries
  • Use covered queries to reduce document scans
  • Implement retry logic for transient errors
  • MongoDB Replica Set Election
  • MongoDB Sharding Chunk Migration
  • MongoDB Aggregation Pipeline Error
  • MongoDB Connection Failed