Bird
Raised Fist0
MongoDBquery~3 mins

Why $inc operator for incrementing in MongoDB? - Purpose & Use Cases

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
The Big Idea

What if you could update scores instantly without risking mistakes or delays?

The Scenario

Imagine you have a list of scores for players in a game stored on paper. Every time a player scores, you have to find their name and add the new points manually.

The Problem

This manual method is slow and easy to mess up. You might add points to the wrong player or forget to update the score. It's hard to keep track when many players score quickly.

The Solution

The $inc operator in MongoDB lets you add a number directly to a field in the database. It updates the score safely and instantly without needing to read the old value first.

Before vs After
Before
oldScore = db.players.findOne({name: 'Alice'}).score
newScore = oldScore + 5
db.players.updateOne({name: 'Alice'}, {$set: {score: newScore}})
After
db.players.updateOne({name: 'Alice'}, {$inc: {score: 5}})
What It Enables

You can quickly and safely update numbers in your database with a single command, even when many users change data at the same time.

Real Life Example

In a social media app, $inc can instantly increase the number of likes on a post whenever someone clicks the like button, without losing any clicks.

Key Takeaways

Manual updates are slow and error-prone.

$inc updates numbers directly and safely.

This makes real-time counting and scoring easy and reliable.

Practice

(1/5)
1. What does the $inc operator do in MongoDB?
easy
A. It creates a new collection.
B. It increments or decrements the value of a numeric field.
C. It deletes a field from the document.
D. It replaces the entire document with a new one.

Solution

  1. Step 1: Understand the purpose of $inc

    The $inc operator is used to add or subtract a number from an existing numeric field in a document.
  2. Step 2: Compare with other options

    Replacing documents, deleting fields, or creating collections are not functions of $inc.
  3. Final Answer:

    It increments or decrements the value of a numeric field. -> Option B
  4. Quick Check:

    $inc changes numbers by adding/subtracting [OK]
Hint: Remember: $inc changes numbers, not documents [OK]
Common Mistakes:
  • Thinking $inc replaces the whole document
  • Confusing $inc with delete or create operations
  • Assuming $inc works on non-numeric fields
2. Which of the following is the correct syntax to increment the field score by 5 in MongoDB?
easy
A. { $inc: { score: '5' } }
B. { $inc: { score: '+5' } }
C. { $inc: { 'score': 'five' } }
D. { $inc: { score: 5 } }

Solution

  1. Step 1: Check the value type for $inc

    The value to increment must be a number, not a string or word.
  2. Step 2: Validate syntax correctness

    { $inc: { score: 5 } } uses a number 5 correctly. { $inc: { score: '5' } } uses a string '5', which is invalid. { $inc: { 'score': 'five' } } uses a word 'five', invalid. { $inc: { score: '+5' } } uses a string '+5', invalid.
  3. Final Answer:

    { $inc: { score: 5 } } -> Option D
  4. Quick Check:

    Use number values with $inc [OK]
Hint: Use numeric values without quotes for $inc [OK]
Common Mistakes:
  • Using strings instead of numbers for increment values
  • Adding plus sign (+) inside JSON value
  • Using words instead of numeric literals
3. Given a document { _id: 1, count: 10 }, what will be the document after running db.collection.updateOne({ _id: 1 }, { $inc: { count: -3 } })?
medium
A. { _id: 1, count: -3 }
B. { _id: 1, count: 13 }
C. { _id: 1, count: 7 }
D. { _id: 1, count: 10 }

Solution

  1. Step 1: Understand the initial document

    The document has count equal to 10.
  2. Step 2: Apply the $inc operation with -3

    Subtract 3 from 10: 10 - 3 = 7.
  3. Final Answer:

    { _id: 1, count: 7 } -> Option C
  4. Quick Check:

    10 + (-3) = 7 [OK]
Hint: Subtract by using negative numbers with $inc [OK]
Common Mistakes:
  • Adding instead of subtracting when using negative values
  • Replacing the whole document instead of updating
  • Assuming $inc only increments, not decrements
4. You run this update: db.collection.updateOne({ _id: 2 }, { $inc: { visits: 1 } }) but get an error. What is the most likely cause?
medium
A. The visits field is a string, not a number.
B. The _id field is missing in the query.
C. The $inc operator cannot increment by 1.
D. The collection does not exist.

Solution

  1. Step 1: Understand $inc requirements

    $inc only works on numeric fields. If visits is a string, it causes an error.
  2. Step 2: Check other options

    Missing _id would not cause this error if the document exists. $inc can increment by 1. Collection existence error would be different.
  3. Final Answer:

    The visits field is a string, not a number. -> Option A
  4. Quick Check:

    $inc needs numeric fields [OK]
Hint: Ensure field is numeric before using $inc [OK]
Common Mistakes:
  • Trying to increment string fields
  • Assuming $inc works on any data type
  • Ignoring error messages about field types
5. You want to increment the likes field by 1 for all documents where likes does not exist yet. Which update command will correctly do this without errors?
hard
A. db.collection.updateMany({ likes: { $exists: false } }, { $inc: { likes: 1 } })
B. db.collection.updateMany({}, { $inc: { likes: 1 } })
C. db.collection.updateMany({ likes: null }, { $inc: { likes: 1 } })
D. db.collection.updateMany({}, { $set: { likes: 1 } })

Solution

  1. Step 1: Identify documents without likes

    Use the query { likes: { $exists: false } } to find documents missing the likes field.
  2. Step 2: Use $inc to add 1 to likes

    $inc will create the field with value 1 if it does not exist, so this safely increments missing fields.
  3. Step 3: Check other options

    db.collection.updateMany({}, { $inc: { likes: 1 } }) increments all documents, including those with likes. db.collection.updateMany({ likes: null }, { $inc: { likes: 1 } }) matches documents where likes is null, not missing. db.collection.updateMany({}, { $set: { likes: 1 } }) sets likes to 1, not increments.
  4. Final Answer:

    db.collection.updateMany({ likes: { $exists: false } }, { $inc: { likes: 1 } }) -> Option A
  5. Quick Check:

    Increment missing fields with $exists: false filter [OK]
Hint: Filter missing fields with $exists: false before $inc [OK]
Common Mistakes:
  • Incrementing all documents without filtering
  • Using $set instead of $inc
  • Filtering with null instead of $exists: false