This code updates Bob's email if he exists or adds a new user Bob with that email. Then it shows Bob's record.
MongoDB
use testdb
// Try to update a user named 'bob' or insert if not found
db.users.updateOne(
{ username: "bob" },
{ $set: { email: "bob@example.com" } },
{ upsert: true }
)
// Find and show the user 'bob'
db.users.find({ username: "bob" }).toArray()
OutputSuccess
Important Notes
If multiple documents match the filter, only one is updated.
Without upsert: true, no new document is created.
Use $set to change fields without replacing the whole document.
Summary
Upsert updates a document if found or inserts it if missing.
Use updateOne or updateMany with upsert: true.
This helps keep data consistent with fewer commands.
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
Step 1: Understand the upsert option
The upsert option in MongoDB means update if found, insert if not found.
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.
Final Answer:
It updates a document if it exists, or inserts a new one if it does not. -> Option B
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
Step 1: Recall the updateOne method parameters
The updateOne method takes a filter, an update document, and an options object.
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.
Final Answer:
db.collection.updateOne(filter, update, {upsert: true}) -> Option C
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:
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
Step 1: Check the updateOne parameters
The updateOne call lacks the options object with upsert: true, so it only updates existing documents.
Step 2: Confirm upsert behavior
Without upsert: true, no new document is inserted if the filter finds no match.
Final Answer:
Missing the upsert: true option in the updateOne call. -> Option D
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?