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 writeCommon Causes
- 1.Concurrent transactions modifying same documents
- 2.Transaction timeout exceeded retry limit
- 3.Write conflict detection threshold too low
- 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 improveCommon 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
Related Issues
- MongoDB Replica Set Election
- MongoDB Sharding Chunk Migration
- MongoDB Aggregation Pipeline Error
- MongoDB Connection Failed