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
$set Operator to Update User Profiles
📖 Scenario: You are managing a user database for a small online community. Each user has a profile stored as a document in a MongoDB collection called users. You want to update user profiles by changing or adding specific fields without replacing the entire document.
🎯 Goal: Learn how to use the MongoDB $set operator to update specific fields in user documents.
📋 What You'll Learn
Create a users collection with three user documents having fields _id, name, and age.
Define a filter to select a user by name.
Use the $set operator to update the age field of the selected user.
Add a new field email to the selected user using $set.
💡 Why This Matters
🌍 Real World
Updating user profiles is a common task in web applications where user information changes over time. Using the <code>$set</code> operator lets you change only the needed fields without affecting others.
💼 Career
Understanding how to update documents efficiently in MongoDB is essential for backend developers and database administrators working with NoSQL databases.
Progress0 / 4 steps
1
Create the users collection with initial user documents
Create a variable called users that is a list of three documents. Each document should have the exact fields and values: { _id: 1, name: "Alice", age: 25 }, { _id: 2, name: "Bob", age: 30 }, and { _id: 3, name: "Charlie", age: 35 }.
MongoDB
Hint
Use an array with three objects. Each object must have _id, name, and age fields exactly as shown.
2
Define a filter to select the user named "Bob"
Create a variable called filter that is a document with the exact field name set to "Bob".
MongoDB
Hint
The filter should be an object with name set to "Bob".
3
Use the $set operator to update Bob's age to 31
Create a variable called update that uses the $set operator to set the age field to 31.
MongoDB
Hint
Use $set with an object that sets age to 31.
4
Add a new field email to Bob's profile using $set
Extend the update variable to also set the email field to "bob@example.com" using the $set operator.
MongoDB
Hint
Add email: "bob@example.com" inside the $set object.
Practice
(1/5)
1. What does the $set operator do in MongoDB?
easy
A. It updates the value of specified fields or adds them if they don't exist.
B. It deletes specified fields from a document.
C. It replaces the entire document with a new one.
D. It creates a new collection in the database.
Solution
Step 1: Understand the purpose of $set
The $set operator is used to update existing fields or add new fields in a MongoDB document without affecting other fields.
Step 2: Compare with other operations
Deleting fields uses $unset, replacing documents uses replaceOne, and creating collections is unrelated to $set.
Final Answer:
It updates the value of specified fields or adds them if they don't exist. -> Option A
Quick Check:
$set updates or adds fields [OK]
Hint: Remember: $set changes or adds fields only [OK]
Common Mistakes:
Confusing $set with $unset which deletes fields
Thinking $set replaces the whole document
Assuming $set creates collections
2. Which of the following is the correct syntax to set the field age to 30 in a document using $set?
easy
A. db.collection.updateOne({name: 'John'}, {$set: [age: 30]})
B. db.collection.updateOne({name: 'John'}, {$set: {age: 30}})
C. db.collection.updateOne({name: 'John'}, {$set: 'age': 30})
D. db.collection.updateOne({name: 'John'}, {$set: age = 30})
Solution
Step 1: Identify correct $set syntax
The $set operator requires an object with field-value pairs inside curly braces: {$set: {field: value}}.
Step 2: Check each option
db.collection.updateOne({name: 'John'}, {$set: {age: 30}}) uses correct syntax with {age: 30}. Options A, B, and C use invalid JavaScript or MongoDB syntax.
Final Answer:
db.collection.updateOne({name: 'John'}, {$set: {age: 30}}) -> Option B
Quick Check:
Correct $set syntax uses object with field-value pairs [OK]
Hint: Use {$set: {field: value}} with curly braces [OK]
Common Mistakes:
Using assignment (=) inside $set
Using quotes incorrectly around field names
Using array brackets instead of object braces
3. Given the document { name: 'Alice', city: 'Paris' }, what will be the document after running db.users.updateOne({name: 'Alice'}, {$set: {city: 'London', age: 25}})?
medium
A. { city: 'London', age: 25 }
B. { name: 'Alice', city: 'Paris', age: 25 }
C. { name: 'Alice', city: 'London', age: 25 }
D. { name: 'Alice', city: 'London' }
Solution
Step 1: Understand $set effect on fields
The $set operator updates existing fields and adds new fields without removing others.
Step 2: Apply update to the document
Field city changes from 'Paris' to 'London', and new field age with value 25 is added. The name field remains unchanged.
Hint: Only fields in $set change; others stay same [OK]
Common Mistakes:
Assuming $set removes fields not listed
Thinking $set only adds but does not update
Confusing updateOne with replaceOne
4. You run this update: db.products.updateOne({id: 101}, {$set: {price: 20, stock}}). What is the problem?
medium
A. Missing value for the field 'stock' inside $set causes a syntax error.
B. The query filter {id: 101} is invalid.
C. You cannot update multiple fields with $set.
D. The update will delete the document.
Solution
Step 1: Analyze the $set object
The $set operator requires each field to have a value. Here, stock is listed without a value, which is invalid syntax.
Step 2: Check other parts of the update
The filter {id: 101} is valid, and $set can update multiple fields. The update does not delete documents.
Final Answer:
Missing value for the field 'stock' inside $set causes a syntax error. -> Option A
Quick Check:
Each field in $set must have a value [OK]
Hint: Every field in $set needs a value [OK]
Common Mistakes:
Leaving out values for fields in $set
Confusing filter syntax with update syntax
Thinking $set deletes documents
5. You want to update all documents in the employees collection to add a new field status with value 'active' only if the field status does not already exist. Which update command using $set is correct?
hard
A. db.employees.updateMany({}, {$set: {status: 'active'}})
B. db.employees.updateMany({status: {$ne: 'active'}}, {$set: {status: 'active'}})
C. db.employees.updateMany({status: null}, {$set: {status: 'active'}})
D. db.employees.updateMany({status: {$exists: false}}, {$set: {status: 'active'}})
Solution
Step 1: Identify condition to update only missing 'status'
The filter {status: {$exists: false}} selects documents where the 'status' field does not exist.
Step 2: Use $set to add 'status' field
The update {$set: {status: 'active'}} adds the 'status' field with value 'active' only to those documents.
Step 3: Check other options
db.employees.updateMany({}, {$set: {status: 'active'}}) updates all documents regardless of existing 'status'. db.employees.updateMany({status: null}, {$set: {status: 'active'}}) only matches documents with 'status' equal to null, not missing. db.employees.updateMany({status: {$ne: 'active'}}, {$set: {status: 'active'}}) updates documents where 'status' is not 'active', which may overwrite existing values.
Final Answer:
db.employees.updateMany({status: {$exists: false}}, {$set: {status: 'active'}}) -> Option D
Quick Check:
Use {$exists: false} to target missing fields [OK]
Hint: Filter with {$exists: false} to add missing fields only [OK]