Bird
Raised Fist0
MongoDBquery~5 mins

Upsert behavior (update or insert) in MongoDB - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What does 'upsert' mean in MongoDB?
Upsert means to update a document if it exists, or insert a new document if it does not exist.
Click to reveal answer
beginner
Which MongoDB method supports upsert behavior?
The updateOne(), updateMany(), and findOneAndUpdate() methods support upsert when you set the option { upsert: true }.
Click to reveal answer
beginner
What option must be set to true to enable upsert in an update operation?
The option 'upsert: true' must be set in the update operation options.
Click to reveal answer
intermediate
If no document matches the filter in an upsert operation, what happens?
A new document is created using the filter and update fields combined, then inserted into the collection.
Click to reveal answer
intermediate
Can upsert cause duplicate documents if the filter is not unique?
Yes, if the filter does not uniquely identify documents, multiple inserts can happen on repeated upserts.
Click to reveal answer
What does setting { upsert: true } do in a MongoDB update operation?
AOnly updates existing documents
BDeletes the matched document
CInserts a new document if no match is found
DReturns an error if no document matches
Which method can perform an upsert in MongoDB?
Afind()
BupdateOne()
CdeleteOne()
DinsertOne()
If a document matches the filter in an upsert operation, what happens?
AThe document is updated
BA new document is inserted
CThe document is deleted
DNothing happens
What happens if the filter in an upsert is not unique?
AThe operation is ignored
BOnly one document is updated
CAn error is thrown
DMultiple documents may be inserted on repeated upserts
Which option is required to perform an upsert with findOneAndUpdate()?
A{ upsert: true }
B{ multi: true }
C{ new: true }
D{ returnOriginal: true }
Explain how upsert works in MongoDB and when you would use it.
Think about saving time by combining update and insert in one step.
You got /4 concepts.
    Describe the risks of using upsert with a non-unique filter.
    Consider what happens if MongoDB can't find a unique match.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does the upsert option do in a MongoDB updateOne operation?
      easy
      A. It only inserts a new document without updating existing ones.
      B. It updates a document if it exists, or inserts a new one if it does not.
      C. It deletes a document if it exists, otherwise does nothing.
      D. It duplicates the document regardless of existence.

      Solution

      1. Step 1: Understand the upsert option

        The upsert option in MongoDB means update if found, insert if not found.
      2. Step 2: Apply to updateOne operation

        When using updateOne with upsert: true, MongoDB updates the matching document or inserts a new one if none matches.
      3. Final Answer:

        It updates a document if it exists, or inserts a new one if it does not. -> Option B
      4. Quick Check:

        Upsert = update or insert [OK]
      Hint: Upsert means update if found, else insert new [OK]
      Common Mistakes:
      • Thinking upsert only inserts without updating
      • Confusing upsert with delete operation
      • Assuming upsert duplicates documents
      2. Which of the following is the correct syntax to perform an upsert using updateOne in MongoDB?
      easy
      A. db.collection.updateOne(filter, update, {update: true})
      B. db.collection.updateOne(filter, update, {insert: true})
      C. db.collection.updateOne(filter, update, {upsert: true})
      D. db.collection.updateOne(filter, update, {replace: true})

      Solution

      1. Step 1: Recall the updateOne method parameters

        The updateOne method takes a filter, an update document, and an options object.
      2. Step 2: Identify the correct option for upsert

        The option to enable upsert is {upsert: true}, which tells MongoDB to insert if no match is found.
      3. Final Answer:

        db.collection.updateOne(filter, update, {upsert: true}) -> Option C
      4. Quick Check:

        Use upsert: true in options [OK]
      Hint: Use {upsert: true} in updateOne options [OK]
      Common Mistakes:
      • Using {insert: true} instead of {upsert: true}
      • Omitting the options object entirely
      • Confusing update with replace option
      3. Given the collection users with documents:
      { _id: 1, name: "Alice", age: 25 }
      What will be the result after running:
      db.users.updateOne({ _id: 2 }, { $set: { name: "Bob", age: 30 } }, { upsert: true })

      and then querying db.users.find().toArray()?
      medium
      A. [{ _id: 1, name: "Alice", age: 25 }, { _id: 2, name: "Bob", age: 30 }]
      B. [{ _id: 1, name: "Alice", age: 25 }]
      C. [{ _id: 2, name: "Bob", age: 30 }]
      D. []

      Solution

      1. Step 1: Understand the updateOne with upsert

        The filter looks for _id: 2, which does not exist, so upsert inserts a new document with _id: 2 and the given fields.
      2. Step 2: Check existing documents

        The original document with _id: 1 remains unchanged, so the collection now has two documents.
      3. Final Answer:

        [{ _id: 1, name: "Alice", age: 25 }, { _id: 2, name: "Bob", age: 30 }] -> Option A
      4. Quick Check:

        Upsert inserts missing document, keeps existing [OK]
      Hint: Upsert inserts new if filter misses existing docs [OK]
      Common Mistakes:
      • Assuming existing documents get deleted
      • Thinking upsert only updates existing documents
      • Expecting only the new document after upsert
      4. You run the following code but it does not insert a new document when no match is found:
      db.products.updateOne({ sku: "123" }, { price: 19.99 })

      What is the likely error?
      medium
      A. The filter syntax is incorrect and causes a syntax error.
      B. MongoDB does not support upsert with updateOne.
      C. The update document is missing the $set operator.
      D. Missing the upsert: true option in the updateOne call.

      Solution

      1. Step 1: Check the updateOne parameters

        The updateOne call lacks the options object with upsert: true, so it only updates existing documents.
      2. Step 2: Confirm upsert behavior

        Without upsert: true, no new document is inserted if the filter finds no match.
      3. Final Answer:

        Missing the upsert: true option in the updateOne call. -> Option D
      4. Quick Check:

        Upsert option needed to insert new docs [OK]
      Hint: Add {upsert: true} to updateOne options to insert [OK]
      Common Mistakes:
      • Forgetting to add upsert option
      • Confusing missing $set with upsert behavior
      • Believing updateOne cannot upsert
      5. You want to update the status field to "active" for a user with email: "user@example.com". If no such user exists, insert a new document with email and status. Which MongoDB command correctly achieves this?
      hard
      A. db.users.updateOne({ email: "user@example.com" }, { $set: { status: "active" } }, { upsert: true })
      B. db.users.insertOne({ email: "user@example.com", status: "active" })
      C. db.users.updateOne({ email: "user@example.com" }, { status: "active" }, { upsert: true })
      D. db.users.updateMany({ email: "user@example.com" }, { $set: { status: "active" } })

      Solution

      1. Step 1: Identify the correct update syntax with upsert

        To update or insert, use updateOne with a filter, an update using $set, and {upsert: true} option.
      2. Step 2: Check each option

        db.users.updateOne({ email: "user@example.com" }, { $set: { status: "active" } }, { upsert: true }) uses $set and upsert correctly. db.users.insertOne({ email: "user@example.com", status: "active" }) only inserts, no update. db.users.updateOne({ email: "user@example.com" }, { status: "active" }, { upsert: true }) misses $set operator, which replaces the whole document incorrectly. db.users.updateMany({ email: "user@example.com" }, { $set: { status: "active" } }) updates many but no upsert.
      3. Final Answer:

        db.users.updateOne({ email: "user@example.com" }, { $set: { status: "active" } }, { upsert: true }) -> Option A
      4. Quick Check:

        Use updateOne + $set + upsert: true [OK]
      Hint: Use $set with upsert: true in updateOne to update or insert [OK]
      Common Mistakes:
      • Omitting $set causing document replacement
      • Using insertOne which does not update
      • Forgetting upsert option for insert fallback