Bird
Raised Fist0
MongoDBquery~5 mins

Write concern and data durability in MongoDB

Choose your learning style10 modes available
Introduction

Write concern tells MongoDB how sure you want to be that your data is saved safely. It helps protect your data from being lost.

When you want to make sure data is saved on multiple servers before continuing.
When you need to confirm that data is written to disk to avoid losing it if the server crashes.
When you want faster writes and can accept some risk of data loss.
When you want to balance speed and safety depending on your app's needs.
Syntax
MongoDB
db.collection.insertOne(document, { writeConcern: { w: <level>, j: <boolean>, wtimeout: <ms> } })

w sets how many servers must confirm the write (e.g., 1, majority, or 0).

j means waiting for the write to be saved to the journal (disk).

Examples
Waits for confirmation from the primary server only.
MongoDB
db.users.insertOne({name: 'Alice'}, { writeConcern: { w: 1 } })
Waits for most servers to confirm and ensures data is saved to disk journal.
MongoDB
db.orders.insertOne({item: 'Book'}, { writeConcern: { w: 'majority', j: true } })
Does not wait for any confirmation, fastest but no guarantee data is saved.
MongoDB
db.logs.insertOne({event: 'login'}, { writeConcern: { w: 0 } })
Sample Program

This command inserts a document into the inventory collection. It waits for the majority of servers to confirm the write, ensures the write is saved to the journal (disk), and times out if it takes more than 5 seconds.

MongoDB
db.inventory.insertOne(
  { item: 'pen', qty: 50 },
  { writeConcern: { w: 'majority', j: true, wtimeout: 5000 } }
)
OutputSuccess
Important Notes

Using w: 'majority' helps keep data safe by waiting for most servers to confirm.

Setting j: true ensures data is written to disk journal, improving durability.

Higher write concern can slow down writes but protects data better.

Summary

Write concern controls how MongoDB confirms data is saved.

It balances speed and safety for your data.

Use write concern options to match your app's needs for durability.

Practice

(1/5)
1. What does the writeConcern option in MongoDB control?
easy
A. How MongoDB confirms that data is saved to the database
B. The format of data stored in MongoDB
C. The speed of data retrieval from MongoDB
D. The size limit of documents in MongoDB

Solution

  1. Step 1: Understand the role of write concern

    Write concern tells MongoDB how to confirm that a write operation is saved and durable.
  2. Step 2: Differentiate from other options

    It does not control data format, retrieval speed, or document size.
  3. Final Answer:

    How MongoDB confirms that data is saved to the database -> Option A
  4. Quick Check:

    Write concern = data save confirmation [OK]
Hint: Write concern = confirmation of data saved [OK]
Common Mistakes:
  • Confusing write concern with data format
  • Thinking it controls read speed
  • Assuming it limits document size
2. Which of the following is the correct way to specify a write concern that waits for acknowledgment from the primary in MongoDB?
easy
A. { writeConcern: { w: -1 } }
B. { writeConcern: { w: 0 } }
C. { writeConcern: { w: 'majority' } }
D. { writeConcern: { w: 1 } }

Solution

  1. Step 1: Recall write concern values

    w:1 means wait for acknowledgment from the primary node only.
  2. Step 2: Check other options

    w:0 means no acknowledgment; w:'majority' waits for majority nodes; w:-1 is invalid.
  3. Final Answer:

    { writeConcern: { w: 1 } } -> Option D
  4. Quick Check:

    w:1 = primary ack wait [OK]
Hint: w:1 waits for primary acknowledgment [OK]
Common Mistakes:
  • Using w:0 which means no acknowledgment
  • Confusing 'majority' with primary only
  • Using invalid negative values
3. Consider this MongoDB insert command with write concern:
db.collection.insertOne({name: 'Alice'}, {writeConcern: {w: 'majority', wtimeout: 5000}})

What happens if the majority of nodes do not acknowledge the write within 5 seconds?
medium
A. The write operation succeeds immediately without waiting
B. The write operation retries indefinitely until acknowledged
C. The write operation fails with a timeout error
D. The write operation ignores the write concern and writes anyway

Solution

  1. Step 1: Understand w:'majority' and wtimeout

    The write waits for majority nodes to confirm within 5000 ms (5 seconds).
  2. Step 2: Outcome if timeout exceeded

    If majority nodes don't respond in time, MongoDB returns a timeout error and the write is considered failed.
  3. Final Answer:

    The write operation fails with a timeout error -> Option C
  4. Quick Check:

    w:'majority' + wtimeout = fail if no timely ack [OK]
Hint: wtimeout limits wait; timeout causes failure [OK]
Common Mistakes:
  • Assuming write succeeds immediately
  • Thinking MongoDB retries forever
  • Ignoring write concern on timeout
4. You wrote this code to insert a document with write concern:
db.collection.insertOne({item: 'book'}, {writeConcern: {w: 2, wtimeout: '3000'}})

But it throws an error. What is the problem?
medium
A. wtimeout must be a number, not a string
B. w:2 is invalid; only 0,1, or 'majority' allowed
C. insertOne does not accept writeConcern option
D. The document field 'item' is not allowed

Solution

  1. Step 1: Check writeConcern syntax

    wtimeout expects a number (milliseconds), not a string.
  2. Step 2: Validate other parts

    w:2 is valid if the replica set has at least 2 nodes; insertOne accepts writeConcern; 'item' field is valid.
  3. Final Answer:

    wtimeout must be a number, not a string -> Option A
  4. Quick Check:

    wtimeout type must be number [OK]
Hint: wtimeout needs number, not quotes [OK]
Common Mistakes:
  • Using string for wtimeout
  • Thinking w:2 is invalid always
  • Assuming insertOne disallows writeConcern
5. You want to ensure that a write is saved to disk on the primary and replicated to at least two secondary nodes before confirming success. Which write concern setting achieves this?
hard
A. { writeConcern: { w: 1, j: true } }
B. { writeConcern: { w: 3, j: true } }
C. { writeConcern: { w: 'majority', j: false } }
D. { writeConcern: { w: 2, j: false } }

Solution

  1. Step 1: Understand w and j options

    w:3 means wait for acknowledgment from primary plus two secondaries (total 3 nodes). j:true means wait for write to be committed to journal (disk) on primary.
  2. Step 2: Check other options

    B waits only for primary with journaling; C waits for majority but no journaling; D waits for 2 nodes but no journaling.
  3. Final Answer:

    { writeConcern: { w: 3, j: true } } -> Option B
  4. Quick Check:

    w:3 + j:true = 3 nodes + disk write [OK]
Hint: w:number = nodes ack; j:true = disk commit [OK]
Common Mistakes:
  • Ignoring journaling for durability
  • Using w:'majority' without knowing node count
  • Assuming w:2 means two secondaries only
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard