Bird
Raised Fist0
MongoDBquery~5 mins

updateOne method in MongoDB

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
Introduction
The updateOne method changes a single document in a collection. It helps keep data correct and up to date.
When you want to fix a typo in one user's name in a list.
When you need to change the status of one order from 'pending' to 'shipped'.
When you want to add a new phone number to one contact's details.
When you want to mark one task as completed in a to-do list.
When you want to update the price of one product in your store.
Syntax
MongoDB
db.collection.updateOne(
  <filter>,
  <update>,
  { upsert: <boolean> }
)
The finds the document to update.
The describes the changes to make, usually with $set to change fields.
Examples
Updates the age to 30 for the first user named Alice.
MongoDB
db.users.updateOne(
  { name: "Alice" },
  { $set: { age: 30 } }
)
Changes the status of order 123 to shipped without adding a new order if not found.
MongoDB
db.orders.updateOne(
  { orderId: 123 },
  { $set: { status: "shipped" } },
  { upsert: false }
)
Updates Bob's phone number or adds a new contact if none exists.
MongoDB
db.contacts.updateOne(
  { email: "bob@example.com" },
  { $set: { phone: "555-1234" } },
  { upsert: true }
)
Sample Program
First, we add a product named Pen. Then we update its price to 2.0. Finally, we check the product details.
MongoDB
db.products.insertOne({ name: "Pen", price: 1.5, stock: 100 })
db.products.updateOne(
  { name: "Pen" },
  { $set: { price: 2.0 } }
)
db.products.find({ name: "Pen" }).toArray()
OutputSuccess
Important Notes
updateOne changes only the first document that matches the filter.
If no document matches and upsert is true, a new document is created.
Use $set to change specific fields without replacing the whole document.
Summary
updateOne updates a single document matching a filter.
Use $set inside update to change fields safely.
upsert option adds a new document if none matches.

Practice

(1/5)
1. What does the updateOne method do in MongoDB?
easy
A. Inserts a new document without checking existing ones.
B. Deletes all documents matching the filter.
C. Returns all documents without any update.
D. Updates a single document that matches the filter criteria.

Solution

  1. Step 1: Understand the purpose of updateOne

    The updateOne method is designed to update only one document that matches the given filter.
  2. Step 2: Compare with other operations

    Deleting or inserting documents are different operations; updateOne specifically updates one matching document.
  3. Final Answer:

    Updates a single document that matches the filter criteria. -> Option D
  4. Quick Check:

    updateOne updates one document [OK]
Hint: Remember: updateOne changes only one matching document [OK]
Common Mistakes:
  • Thinking updateOne deletes documents
  • Confusing updateOne with insert operations
  • Assuming updateOne updates multiple documents
2. Which of the following is the correct syntax to update the field age to 30 using updateOne?
easy
A. db.collection.updateOne({name: 'John'}, {$change: {age: 30}});
B. db.collection.updateOne({name: 'John'}, {$set: {age: 30}});
C. db.collection.updateOne({name: 'John'}, {$update: {age: 30}});
D. db.collection.updateOne({name: 'John'}, {age: 30});

Solution

  1. Step 1: Identify the update operator

    MongoDB requires using $set to update fields safely without replacing the whole document.
  2. Step 2: Check syntax correctness

    db.collection.updateOne({name: 'John'}, {$set: {age: 30}}); uses $set correctly; other options use invalid operators or omit $set.
  3. Final Answer:

    db.collection.updateOne({name: 'John'}, {$set: {age: 30}}); -> Option B
  4. Quick Check:

    Use $set to update fields [OK]
Hint: Always use $set inside updateOne to change fields [OK]
Common Mistakes:
  • Omitting $set and passing fields directly
  • Using wrong update operators like $update or $change
  • Forgetting to wrap update fields in an object
3. Given the collection documents:
{ _id: 1, name: 'Alice', age: 25 }
{ _id: 2, name: 'Bob', age: 28 }
What will be the result of this operation?
db.collection.updateOne({name: 'Alice'}, {$set: {age: 26}});
Then querying db.collection.find({name: 'Alice'})?
medium
A. [{ _id: 1, name: 'Alice', age: 26 }]
B. [{ _id: 1, name: 'Alice', age: 25 }]
C. No documents found
D. [{ _id: 2, name: 'Bob', age: 28 }]

Solution

  1. Step 1: Understand updateOne effect

    The updateOne matches the document with name: 'Alice' and updates the age to 26.
  2. Step 2: Query after update

    Querying for name: 'Alice' returns the updated document with age: 26.
  3. Final Answer:

    [{ _id: 1, name: 'Alice', age: 26 }] -> Option A
  4. Quick Check:

    updateOne changes age to 26 [OK]
Hint: updateOne changes one matching document's fields [OK]
Common Mistakes:
  • Expecting no change after updateOne
  • Confusing which document is updated
  • Assuming updateOne updates multiple documents
4. What is wrong with this updateOne command?
db.collection.updateOne({name: 'Eve'}, {age: 35});
medium
A. The collection name is invalid.
B. Filter syntax is incorrect.
C. Missing $set operator to update the field.
D. The updateOne method cannot update numeric fields.

Solution

  1. Step 1: Check update document structure

    The update document must use an update operator like $set to modify fields.
  2. Step 2: Identify missing operator

    The command directly passes {age: 35} without $set, which replaces the entire document instead of just updating the age field.
  3. Final Answer:

    Missing $set operator to update the field. -> Option C
  4. Quick Check:

    Always use $set in updateOne updates [OK]
Hint: Always include $set when updating fields [OK]
Common Mistakes:
  • Forgetting $set operator
  • Assuming updateOne accepts direct field objects
  • Misunderstanding filter vs update parts
5. You want to update the document with username: 'mike' to set active: true. If no such document exists, you want to create it with username: 'mike' and active: true. Which updateOne command achieves this?
hard
A. db.collection.updateOne({username: 'mike'}, {$set: {active: true}}, {upsert: true});
B. db.collection.updateOne({username: 'mike'}, {$set: {active: true}});
C. db.collection.updateOne({username: 'mike'}, {active: true}, {upsert: true});
D. db.collection.updateOne({username: 'mike'}, {$set: {active: true}}, {insertIfNotFound: true});

Solution

  1. Step 1: Use upsert option for insert if no match

    The upsert: true option tells MongoDB to insert if no document matches the filter.
  2. Step 2: Use $set to update or create fields

    The update uses $set to set active: true. The filter ensures username: 'mike' is matched or inserted.
  3. Final Answer:

    db.collection.updateOne({username: 'mike'}, {$set: {active: true}}, {upsert: true}); -> Option A
  4. Quick Check:

    upsert true + $set updates or inserts [OK]
Hint: Use upsert: true with $set to update or insert [OK]
Common Mistakes:
  • Omitting upsert option
  • Passing update fields without $set
  • Using wrong option name like insertIfNotFound