Bird
Raised Fist0
MongoDBquery~20 mins

$addToSet for unique array additions 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 $addToSet Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
query_result
intermediate
2:00remaining
What is the resulting array after using $addToSet?

Consider a MongoDB document with the field tags as ["red", "blue"]. You run this update:

{ $addToSet: { tags: "green" } }

What will be the new value of tags?

A["red", "blue", "green", "green"]
B["red", "blue", "green"]
C["green"]
D["red", "blue"]
Attempts:
2 left
💡 Hint

Remember, $addToSet adds the value only if it is not already present.

🧠 Conceptual
intermediate
2:00remaining
What does $addToSet do when the value already exists?

If you use $addToSet to add a value that is already in the array, what happens?

AThe array remains unchanged; no duplicates are added.
BThe entire array is replaced with the new value.
CThe value is added again, creating duplicates.
DAn error is thrown because duplicates are not allowed.
Attempts:
2 left
💡 Hint

Think about the meaning of 'set' in $addToSet.

📝 Syntax
advanced
2:00remaining
Which update query correctly adds multiple unique values using $addToSet?

You want to add the values "yellow" and "purple" to the colors array, ensuring no duplicates. Which query is correct?

A{ $addToSet: { colors: ["yellow", "purple"] } }
B{ $push: { colors: { $each: ["yellow", "purple"] } } }
C{ $addToSet: { colors: { $each: ["yellow", "purple"] } } }
D{ $addToSet: { colors: { $all: ["yellow", "purple"] } } }
Attempts:
2 left
💡 Hint

To add multiple values uniquely, you need a special operator inside $addToSet.

🔧 Debug
advanced
2:00remaining
Why does this $addToSet update add the new value?

Given the document { _id: 1, items: ["apple", "banana"] }, you run this update:

{ $addToSet: { items: { name: "apple" } } }

Why does the new value get added to the array?

ABecause the array already contains the exact object { name: "apple" }.
BBecause $addToSet only works with strings, not objects.
CBecause the update syntax is invalid and does not run.
DBecause the value { name: "apple" } is an object and differs from the string "apple" in the array.
Attempts:
2 left
💡 Hint

Think about how MongoDB compares objects and strings in arrays.

optimization
expert
3:00remaining
How to efficiently add unique nested objects to an array using $addToSet?

You have a collection where each document has an orders array of objects like { productId: 1, quantity: 2 }. You want to add a new order { productId: 3, quantity: 1 } only if it does not already exist (exact match). Which update query is the most efficient and correct?

A{ $addToSet: { orders: { productId: 3, quantity: 1 } } }
B{ $push: { orders: { productId: 3, quantity: 1 } } }
C{ $addToSet: { orders: { $each: [ { productId: 3, quantity: 1 } ] } } }
D{ $addToSet: { orders: { $elemMatch: { productId: 3, quantity: 1 } } } }
Attempts:
2 left
💡 Hint

Consider how $addToSet treats objects and the use of $each or $elemMatch.

Practice

(1/5)
1. What is the main purpose of the $addToSet operator in MongoDB?
easy
A. To sort the elements of an array
B. To remove duplicate values from an array
C. To replace an entire array with a new value
D. To add a value to an array only if it does not already exist

Solution

  1. Step 1: Understand the purpose of $addToSet

    $addToSet adds a value to an array only if that value is not already present, ensuring uniqueness.
  2. Step 2: Compare with other array operations

    Unlike operators that remove duplicates or replace arrays, $addToSet only adds unique values without duplicates.
  3. Final Answer:

    To add a value to an array only if it does not already exist -> Option D
  4. Quick Check:

    $addToSet ensures unique additions [OK]
Hint: Remember: $addToSet adds only new unique values [OK]
Common Mistakes:
  • Confusing $addToSet with $push which adds duplicates
  • Thinking $addToSet removes duplicates from existing array
  • Assuming $addToSet sorts the array
2. Which of the following is the correct syntax to add multiple unique values to an array field tags using $addToSet?
easy
A. { $addToSet: { tags: { $each: ["mongodb", "database"] } } }
B. { $addToSet: { tags: ["mongodb", "database"] } }
C. { $addToSet: { tags: { $push: ["mongodb", "database"] } } }
D. { $push: { tags: { $each: ["mongodb", "database"] } } }

Solution

  1. Step 1: Recall syntax for adding multiple unique values

    To add multiple unique values with $addToSet, use $each inside it.
  2. Step 2: Analyze options

    { $addToSet: { tags: { $each: ["mongodb", "database"] } } } correctly uses $addToSet with $each to add multiple unique values. { $addToSet: { tags: ["mongodb", "database"] } } lacks $each, so it tries to add an array as a single element. Using $push inside or instead of $addToSet is incorrect as it doesn't ensure uniqueness.
  3. Final Answer:

    { $addToSet: { tags: { $each: ["mongodb", "database"] } } } -> Option A
  4. Quick Check:

    Use $addToSet with $each for multiple unique additions [OK]
Hint: Use $each inside $addToSet to add multiple unique items [OK]
Common Mistakes:
  • Omitting $each when adding multiple values
  • Using $push instead of $addToSet for uniqueness
  • Adding an array as a single element instead of multiple
3. Given the document { _id: 1, colors: ["red", "blue"] }, what will be the colors array after running this update?
{ $addToSet: { colors: "blue" } }
medium
A. ["red", "blue", "blue"]
B. ["red", "blue"]
C. ["blue"]
D. ["red"]

Solution

  1. Step 1: Understand $addToSet behavior with existing value

    The value "blue" already exists in the array, so $addToSet will not add it again.
  2. Step 2: Determine the resulting array

    Since "blue" is present, the array remains unchanged as ["red", "blue"].
  3. Final Answer:

    ["red", "blue"] -> Option B
  4. Quick Check:

    Existing values are not duplicated by $addToSet [OK]
Hint: If value exists, $addToSet does not add it again [OK]
Common Mistakes:
  • Assuming $addToSet always appends the value
  • Confusing $addToSet with $push which allows duplicates
  • Thinking the array will be replaced
4. You want to add multiple unique tags to a document's tags array, but your update query:
{ $addToSet: { tags: ["nodejs", "mongodb"] } }
adds the entire array as one element instead of separate tags. What is the fix?
medium
A. Use $addToSet: { tags: { $each: ["nodejs", "mongodb"] } }
B. Use $push: { tags: ["nodejs", "mongodb"] }
C. Use $addToSet: { tags: "nodejs", "mongodb" }
D. Use $addToSet: { tags: { $push: ["nodejs", "mongodb"] } }

Solution

  1. Step 1: Identify the problem with adding an array directly

    Adding an array directly with $addToSet adds it as a single element, not multiple elements.
  2. Step 2: Use $each to add multiple unique elements

    Wrapping the array with $each inside $addToSet adds each element uniquely.
  3. Final Answer:

    Use $addToSet: { tags: { $each: ["nodejs", "mongodb"] } } -> Option A
  4. Quick Check:

    Use $each inside $addToSet for multiple unique additions [OK]
Hint: Wrap multiple values with $each inside $addToSet [OK]
Common Mistakes:
  • Adding array directly without $each
  • Using $push instead of $addToSet for uniqueness
  • Incorrect syntax with multiple keys inside $addToSet
5. You have a MongoDB document:
{ _id: 1, items: ["apple", "banana"] }
You want to add the items ["banana", "cherry", "apple", "date"] uniquely to the items array. Which update query will correctly add only the new unique items?
hard
A. { $addToSet: { items: ["banana", "cherry", "apple", "date"] } }
B. { $set: { items: ["banana", "cherry", "apple", "date"] } }
C. { $addToSet: { items: { $each: ["banana", "cherry", "apple", "date"] } } }
D. { $push: { items: { $each: ["banana", "cherry", "apple", "date"] } } }

Solution

  1. Step 1: Understand the goal to add only new unique items

    We want to add only items not already in the array, so duplicates like "banana" and "apple" should not be added again.
  2. Step 2: Choose the correct operator and syntax

    Using $addToSet with $each adds multiple unique items. { $addToSet: { items: { $each: ["banana", "cherry", "apple", "date"] } } } correctly uses this syntax. { $addToSet: { items: ["banana", "cherry", "apple", "date"] } } adds the entire array as one element. { $push: { items: { $each: ["banana", "cherry", "apple", "date"] } } } uses $push which allows duplicates. { $set: { items: ["banana", "cherry", "apple", "date"] } } replaces the entire array, losing existing items.
  3. Final Answer:

    { $addToSet: { items: { $each: ["banana", "cherry", "apple", "date"] } } } -> Option C
  4. Quick Check:

    $addToSet with $each adds only new unique items [OK]
Hint: Use $addToSet with $each to add multiple unique items without duplicates [OK]
Common Mistakes:
  • Adding array directly without $each causing one element addition
  • Using $push which allows duplicates
  • Replacing array with $set losing existing data