Bird
Raised Fist0
MongoDBquery~10 mins

$set operator for setting fields in MongoDB - Interactive Code Practice

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to set the field "age" to 30 in the update operation.

MongoDB
db.users.updateOne({name: "Alice"}, { $set: { age: [1] } })
Drag options to blanks, or click blank then click option'
A25
B30
C35
D40
Attempts:
3 left
💡 Hint
Common Mistakes
Using a string instead of a number for the age value.
Forgetting to use the $set operator.
2fill in blank
medium

Complete the code to set the "status" field to "active" for all matching documents.

MongoDB
db.users.updateMany({ subscribed: true }, { $set: { status: [1] } })
Drag options to blanks, or click blank then click option'
Afalse
Btrue
C"inactive"
D"active"
Attempts:
3 left
💡 Hint
Common Mistakes
Using a boolean value instead of a string.
Omitting the quotes around the string value.
3fill in blank
hard

Fix the error in the update command to correctly set the "score" field to 100.

MongoDB
db.players.updateOne({ name: "Bob" }, { $set: [1] })
Drag options to blanks, or click blank then click option'
A{ score: 100 }
B[ score: 100 ]
Cscore: 100
D"score: 100"
Attempts:
3 left
💡 Hint
Common Mistakes
Not using curly braces around the field and value.
Using square brackets or quotes incorrectly.
4fill in blank
hard

Fill both blanks to set the "level" field to 5 and "active" field to true in one update.

MongoDB
db.accounts.updateOne({ user: "Eve" }, { $set: { [1]: [2], active: true } })
Drag options to blanks, or click blank then click option'
Alevel
B5
Cactive
Dtrue
Attempts:
3 left
💡 Hint
Common Mistakes
Putting the value before the field name.
Using quotes incorrectly around numbers.
5fill in blank
hard

Fill all three blanks to set "score" to 90, "level" to 3, and "active" to false in one update.

MongoDB
db.players.updateOne({ id: 123 }, { $set: { [1]: [2], [3]: 3, active: false } })
Drag options to blanks, or click blank then click option'
Ascore
B90
Clevel
D3
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing up field names and values.
Forgetting commas between fields.

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