$addToSet for unique array additions in MongoDB - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When using $addToSet in MongoDB, it is important to understand how the time it takes to add unique items grows as the array gets bigger.
We want to know how the cost changes when the array inside a document grows in size.
Analyze the time complexity of the following MongoDB update operation.
db.collection.updateOne(
{ _id: 1 },
{ $addToSet: { tags: "newTag" } }
)
This code adds "newTag" to the tags array only if it is not already present.
Look for operations that repeat or grow with input size.
- Primary operation: Checking if the value already exists in the
tagsarray. - How many times: The check scans through the array elements one by one until it finds a match or reaches the end.
As the tags array grows, the time to check for duplicates grows too.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Up to 10 checks |
| 100 | Up to 100 checks |
| 1000 | Up to 1000 checks |
Pattern observation: The number of checks grows roughly in direct proportion to the array size.
Time Complexity: O(n)
This means the time to add a unique item grows linearly with the size of the array.
[X] Wrong: "Adding with $addToSet is always fast and constant time regardless of array size."
[OK] Correct: MongoDB must check each element to avoid duplicates, so the time grows as the array gets bigger.
Understanding how $addToSet scales helps you explain database update costs clearly and shows you know how data size affects performance.
What if the tags array was indexed or stored as a set type? How would the time complexity change?
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
