Bird
Raised Fist0
MongoDBquery~20 mins

$set operator for setting fields in MongoDB - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
MongoDB $set Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
query_result
intermediate
2:00remaining
What is the result of this update operation?
Consider a MongoDB collection users with a document:
{ "_id": 1, "name": "Alice", "age": 25 }
What will be the document after running this update?
db.users.updateOne({ _id: 1 }, { $set: { age: 26, city: "New York" } })
A{ "_id": 1, "name": "Alice", "age": 26, "city": "New York" }
B{ "_id": 1, "name": "Alice", "age": 25, "city": "New York" }
C{ "_id": 1, "name": "Alice", "age": 26 }
D{ "_id": 1, "name": "Alice", "city": "New York" }
Attempts:
2 left
💡 Hint
The $set operator changes existing fields or adds new fields without removing others.
📝 Syntax
intermediate
2:00remaining
Which update command uses $set correctly?
You want to update the field status to "active" in a MongoDB document. Which of these commands is syntactically correct?
Adb.collection.updateOne({ _id: 1 }, { $set: ["status", "active"] })
Bdb.collection.updateOne({ _id: 1 }, { set: { status: "active" } })
Cdb.collection.updateOne({ _id: 1 }, { $set: { status: "active" } })
Ddb.collection.updateOne({ _id: 1 }, { $set: status = "active" })
Attempts:
2 left
💡 Hint
The $set operator must be followed by an object with field-value pairs.
query_result
advanced
2:00remaining
What is the output after this update with nested fields?
Given a document:
{ "_id": 2, "profile": { "name": "Bob", "age": 30 } }
What will the document look like after:
db.collection.updateOne({ _id: 2 }, { $set: { "profile.age": 31, "profile.city": "Boston" } })
A{ "_id": 2, "profile": { "name": "Bob", "age": 30, "city": "Boston" } }
B{ "_id": 2, "profile": { "name": "Bob", "age": 31, "city": "Boston" } }
C{ "_id": 2, "profile": { "name": "Bob", "age": 31 }, "city": "Boston" }
D{ "_id": 2, "profile": { "name": "Bob", "age": 30 }, "profile.city": "Boston" }
Attempts:
2 left
💡 Hint
Using dot notation in $set updates nested fields inside the object.
🔧 Debug
advanced
2:00remaining
Why does this update fail?
You run this update:
db.collection.updateOne({ _id: 3 }, { $set: { age } })

But it throws an error. Why?
ABecause the collection name is missing.
BBecause the _id field cannot be used in update filters.
CBecause updateOne requires $inc operator instead of $set for numbers.
DBecause $set requires a field-value pair, but only a field name 'age' is given without a value.
Attempts:
2 left
💡 Hint
Check the syntax inside the $set object.
🧠 Conceptual
expert
2:00remaining
What happens if you use $set with a field that is an array?
Given a document:
{ "_id": 4, "tags": ["red", "blue"] }

What will be the document after:
db.collection.updateOne({ _id: 4 }, { $set: { tags: "green" } })
A{ "_id": 4, "tags": "green" }
B{ "_id": 4, "tags": ["red", "blue", "green"] }
C{ "_id": 4, "tags": ["green"] }
DThe update will fail with a type error.
Attempts:
2 left
💡 Hint
The $set operator replaces the entire field value with the new value.

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

  1. 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.
  2. Step 2: Compare with other operations

    Deleting fields uses $unset, replacing documents uses replaceOne, and creating collections is unrelated to $set.
  3. Final Answer:

    It updates the value of specified fields or adds them if they don't exist. -> Option A
  4. 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

  1. Step 1: Identify correct $set syntax

    The $set operator requires an object with field-value pairs inside curly braces: {$set: {field: value}}.
  2. 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.
  3. Final Answer:

    db.collection.updateOne({name: 'John'}, {$set: {age: 30}}) -> Option B
  4. 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

  1. Step 1: Understand $set effect on fields

    The $set operator updates existing fields and adds new fields without removing others.
  2. 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.
  3. Final Answer:

    { name: 'Alice', city: 'London', age: 25 } -> Option C
  4. Quick Check:

    $set updates and adds fields, keeps others [OK]
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

  1. 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.
  2. 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.
  3. Final Answer:

    Missing value for the field 'stock' inside $set causes a syntax error. -> Option A
  4. 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

  1. Step 1: Identify condition to update only missing 'status'

    The filter {status: {$exists: false}} selects documents where the 'status' field does not exist.
  2. Step 2: Use $set to add 'status' field

    The update {$set: {status: 'active'}} adds the 'status' field with value 'active' only to those documents.
  3. 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.
  4. Final Answer:

    db.employees.updateMany({status: {$exists: false}}, {$set: {status: 'active'}}) -> Option D
  5. Quick Check:

    Use {$exists: false} to target missing fields [OK]
Hint: Filter with {$exists: false} to add missing fields only [OK]
Common Mistakes:
  • Updating all documents without filter
  • Using null instead of $exists for missing fields
  • Overwriting existing 'status' values unintentionally