$addToSet helps you add items to an array only if they are not already there. It keeps the array unique without duplicates.
$addToSet for unique array additions in MongoDB
Start learning this pattern below
Jump into concepts and practice - no test required
db.collection.updateOne(
{ <filter> },
{ $addToSet: { <arrayField>: <valueToAdd> } }
)filter selects the document to update.
arrayField is the name of the array you want to add to.
db.users.updateOne(
{ name: "Alice" },
{ $addToSet: { hobbies: "reading" } }
)db.users.updateOne(
{ name: "Bob" },
{ $addToSet: { hobbies: { $each: ["swimming", "cycling"] } } }
)db.users.updateOne(
{ name: "Charlie" },
{ $addToSet: { hobbies: "chess" } }
)This program creates a user Diana with two hobbies. It tries to add "jogging" again but it won't duplicate. Then it adds "photography" and tries to add "painting" again. Finally, it prints the document before and after updates.
use testdb // Insert a sample user document db.users.insertOne({ name: "Diana", hobbies: ["painting", "jogging"] }) // Show initial document print("Before update:") printjson(db.users.findOne({ name: "Diana" })) // Add a new hobby "jogging" (already exists) - should not add duplicate // Add a new hobby "photography" (new) - should add // Update with $addToSet for single value db.users.updateOne( { name: "Diana" }, { $addToSet: { hobbies: "jogging" } } ) // Update with $addToSet and $each for multiple values db.users.updateOne( { name: "Diana" }, { $addToSet: { hobbies: { $each: ["photography", "painting"] } } } ) // Show updated document print("After update:") printjson(db.users.findOne({ name: "Diana" }))
$addToSet only adds the value if it is not already in the array, so it prevents duplicates.
Using $each inside $addToSet lets you add multiple unique values at once.
If the array field does not exist, $addToSet creates it with the new value.
$addToSet keeps arrays unique by adding only new values.
Use $each with $addToSet to add multiple unique items at once.
It is useful to avoid duplicate entries in arrays in MongoDB documents.
Practice
$addToSet operator in MongoDB?Solution
Step 1: Understand the purpose of
$addToSet$addToSetadds a value to an array only if that value is not already present, ensuring uniqueness.Step 2: Compare with other array operations
Unlike operators that remove duplicates or replace arrays,$addToSetonly adds unique values without duplicates.Final Answer:
To add a value to an array only if it does not already exist -> Option DQuick Check:
$addToSetensures unique additions [OK]
- Confusing $addToSet with $push which adds duplicates
- Thinking $addToSet removes duplicates from existing array
- Assuming $addToSet sorts the array
tags using $addToSet?Solution
Step 1: Recall syntax for adding multiple unique values
To add multiple unique values with$addToSet, use$eachinside it.Step 2: Analyze options
{ $addToSet: { tags: { $each: ["mongodb", "database"] } } } correctly uses$addToSetwith$eachto add multiple unique values. { $addToSet: { tags: ["mongodb", "database"] } } lacks$each, so it tries to add an array as a single element. Using$pushinside or instead of$addToSetis incorrect as it doesn't ensure uniqueness.Final Answer:
{ $addToSet: { tags: { $each: ["mongodb", "database"] } } } -> Option AQuick Check:
Use $addToSet with $each for multiple unique additions [OK]
- Omitting $each when adding multiple values
- Using $push instead of $addToSet for uniqueness
- Adding an array as a single element instead of multiple
{ _id: 1, colors: ["red", "blue"] }, what will be the colors array after running this update?{ $addToSet: { colors: "blue" } }Solution
Step 1: Understand $addToSet behavior with existing value
The value "blue" already exists in the array, so$addToSetwill not add it again.Step 2: Determine the resulting array
Since "blue" is present, the array remains unchanged as ["red", "blue"].Final Answer:
["red", "blue"] -> Option BQuick Check:
Existing values are not duplicated by $addToSet [OK]
- Assuming $addToSet always appends the value
- Confusing $addToSet with $push which allows duplicates
- Thinking the array will be replaced
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?Solution
Step 1: Identify the problem with adding an array directly
Adding an array directly with$addToSetadds it as a single element, not multiple elements.Step 2: Use $each to add multiple unique elements
Wrapping the array with$eachinside$addToSetadds each element uniquely.Final Answer:
Use $addToSet: { tags: { $each: ["nodejs", "mongodb"] } } -> Option AQuick Check:
Use $each inside $addToSet for multiple unique additions [OK]
- Adding array directly without $each
- Using $push instead of $addToSet for uniqueness
- Incorrect syntax with multiple keys inside $addToSet
{ _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?Solution
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.Step 2: Choose the correct operator and syntax
Using$addToSetwith$eachadds 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$pushwhich allows duplicates. { $set: { items: ["banana", "cherry", "apple", "date"] } } replaces the entire array, losing existing items.Final Answer:
{ $addToSet: { items: { $each: ["banana", "cherry", "apple", "date"] } } } -> Option CQuick Check:
$addToSet with $each adds only new unique items [OK]
- Adding array directly without $each causing one element addition
- Using $push which allows duplicates
- Replacing array with $set losing existing data
