Bird
Raised Fist0
MongoDBquery~5 mins

$push operator for adding to arrays in MongoDB

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
Introduction

The $push operator adds a new item to the end of an array inside a document. It helps you keep lists updated easily.

You want to add a new comment to a list of comments on a blog post.
You need to add a new tag to a list of tags for a product.
You want to add a new score to a list of scores for a player.
You want to keep track of new tasks added to a user's task list.
You want to add a new friend to a user's list of friends.
Syntax
MongoDB
db.collection.updateOne(
  { <filter> },
  { $push: { <arrayField>: <valueToAdd> } }
)

db.collection.updateOne() updates one document matching the filter.

$push adds the valueToAdd to the end of the array in arrayField.

Examples
Adds "painting" to Alice's hobbies array.
MongoDB
db.users.updateOne(
  { name: "Alice" },
  { $push: { hobbies: "painting" } }
)
Adds the number 95 to Bob's scores array.
MongoDB
db.users.updateOne(
  { name: "Bob" },
  { $push: { scores: 95 } }
)
Adds multiple tags "new" and "featured" to Carol's tags array.
MongoDB
db.users.updateOne(
  { name: "Carol" },
  { $push: { tags: { $each: ["new", "featured"] } } }
)
Adds "task1" at the start of Dave's tasks array using $position.
MongoDB
db.users.updateOne(
  { name: "Dave" },
  { $push: { tasks: { $each: ["task1"], $position: 0 } } }
)
Sample Program

This program creates a user named Emma with two hobbies. Then it adds a new hobby "cycling" to her hobbies array using $push. It prints the document before and after the update to show the change.

MongoDB
use testdb

// Insert a sample user document
db.users.insertOne({ name: "Emma", hobbies: ["reading", "swimming"] })

// Show document before update
print("Before update:")
printjson(db.users.findOne({ name: "Emma" }))

// Add a new hobby using $push
const updateResult = db.users.updateOne(
  { name: "Emma" },
  { $push: { hobbies: "cycling" } }
)

// Show update result
print("Update result:")
printjson(updateResult)

// Show document after update
print("After update:")
printjson(db.users.findOne({ name: "Emma" }))
OutputSuccess
Important Notes

The $push operation takes O(1) time to add an element at the end of the array.

Use $each with $push to add multiple items at once.

Common mistake: Trying to $push to a field that is not an array will cause an error.

Use $push when you want to add items to an array; use $addToSet if you want to avoid duplicates.

Summary

$push adds new items to the end of an array inside a document.

It is useful for updating lists like hobbies, tags, or tasks.

You can add one or many items using $push and $each.

Practice

(1/5)
1. What does the $push operator do in MongoDB?
easy
A. Adds a new element to the end of an array field in a document
B. Removes an element from an array field in a document
C. Replaces the entire array field with a new array
D. Creates a new collection in the database

Solution

  1. Step 1: Understand the purpose of $push

    The $push operator is used to add elements to an existing array field inside a MongoDB document.
  2. Step 2: Compare with other options

    Options A, C, and D describe different operations: removing elements, replacing arrays, or creating collections, which are not what $push does.
  3. Final Answer:

    Adds a new element to the end of an array field in a document -> Option A
  4. Quick Check:

    $push adds elements [OK]
Hint: Remember: $push always adds to array end [OK]
Common Mistakes:
  • Confusing $push with $pull (which removes items)
  • Thinking $push replaces the whole array
  • Mixing $push with collection creation commands
2. Which of the following is the correct syntax to add the value 5 to the array field numbers in a document where _id is 1?
easy
A. db.collection.updateOne({_id: 1}, {$push: {numbers: 5}})
B. db.collection.updateOne({_id: 1}, {$push: numbers: 5})
C. db.collection.updateOne({_id: 1}, {$push: {numbers => 5}})
D. db.collection.updateOne({_id: 1}, {$push: {numbers: [5]}})

Solution

  1. Step 1: Identify correct $push syntax

    The correct syntax uses an object with the field name as key and the value to add as value: {$push: {field: value}}.
  2. Step 2: Analyze each option

    db.collection.updateOne({_id: 1}, {$push: {numbers: 5}}) matches the correct syntax. db.collection.updateOne({_id: 1}, {$push: numbers: 5}) misses curly braces around the field-value pair. db.collection.updateOne({_id: 1}, {$push: {numbers => 5}}) uses an invalid arrow syntax. db.collection.updateOne({_id: 1}, {$push: {numbers: [5]}}) pushes the array [5] as a single element instead of adding the scalar value 5.
  3. Final Answer:

    db.collection.updateOne({_id: 1}, {$push: {numbers: 5}}) -> Option A
  4. Quick Check:

    Correct $push syntax uses {$push: {field: value}} [OK]
Hint: Use {$push: {field: value}} with braces [OK]
Common Mistakes:
  • Omitting braces around field-value pair
  • Using wrong symbols like => instead of :
  • Pushing an array when a single value is intended
3. Given the document { _id: 1, tags: ["red", "blue"] }, what will be the tags array after running db.collection.updateOne({_id: 1}, {$push: {tags: "green"}})?
medium
A. ["red", "blue"]
B. ["red", "green", "blue"]
C. ["green", "red", "blue"]
D. ["red", "blue", "green"]

Solution

  1. Step 1: Understand $push effect on array

    The $push operator adds the new element to the end of the existing array.
  2. Step 2: Apply $push to the given array

    Starting with ["red", "blue"], pushing "green" adds it at the end, resulting in ["red", "blue", "green"].
  3. Final Answer:

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

    New item added at array end [OK]
Hint: Remember $push adds at the end of array [OK]
Common Mistakes:
  • Assuming $push adds at the start
  • Replacing the whole array instead of adding
  • Confusing order of elements after push
4. You want to add multiple values ["yellow", "purple"] to the colors array in a document with _id: 2. Which update command will NOT work correctly?
medium
A. db.collection.updateOne({_id: 2}, {$push: {colors: { $each: ["yellow", "purple"] }}})
B. db.collection.updateOne({_id: 2}, {$push: {colors: ["yellow", "purple"]}})
C. db.collection.updateOne({_id: 2}, {$push: {colors: {$each: ["yellow", "purple"]}}})
D. db.collection.updateOne({_id: 2}, {$push: {colors: { $each: ["yellow", "purple" ] }}})

Solution

  1. Step 1: Understand how to push multiple items

    To add multiple items to an array, $push must be combined with $each inside the update document.
  2. Step 2: Analyze each option

    Options B, C, and D correctly use $each to add multiple values. db.collection.updateOne({_id: 2}, {$push: {colors: ["yellow", "purple"]}}) tries to push an array directly, which will add the entire array as a single element, not multiple elements.
  3. Final Answer:

    db.collection.updateOne({_id: 2}, {$push: {colors: ["yellow", "purple"]}}) -> Option B
  4. Quick Check:

    Use $each to push multiple items [OK]
Hint: Use $each inside $push for multiple items [OK]
Common Mistakes:
  • Pushing an array directly instead of using $each
  • Forgetting curly braces around $each
  • Using wrong operators like $addToSet instead of $push
5. You have a document { _id: 3, tasks: ["task1"] }. You want to add "task2" and "task3" only if they are not already in the array. Which update command correctly achieves this?
hard
A. db.collection.updateOne({_id: 3}, {$push: {tasks: { $each: ["task2", "task3"] }}})
B. db.collection.updateOne({_id: 3}, {$push: {tasks: { $addToSet: ["task2", "task3"] }}})
C. db.collection.updateOne({_id: 3}, {$addToSet: {tasks: { $each: ["task2", "task3"] }}})
D. db.collection.updateOne({_id: 3}, {$push: {tasks: ["task2", "task3"]}})

Solution

  1. Step 1: Understand difference between $push and $addToSet

    $push adds items regardless of duplicates. $addToSet adds items only if they don't exist already.
  2. Step 2: Analyze the commands

    db.collection.updateOne({_id: 3}, {$addToSet: {tasks: { $each: ["task2", "task3"] }}}) uses $addToSet with $each to add multiple unique items. Options A and D use $push which can add duplicates. db.collection.updateOne({_id: 3}, {$push: {tasks: { $addToSet: ["task2", "task3"] }}}) incorrectly nests $addToSet inside $push, which is invalid syntax.
  3. Final Answer:

    db.collection.updateOne({_id: 3}, {$addToSet: {tasks: { $each: ["task2", "task3"] }}}) -> Option C
  4. Quick Check:

    Use $addToSet with $each for unique additions [OK]
Hint: Use $addToSet with $each to avoid duplicates [OK]
Common Mistakes:
  • Using $push when duplicates should be avoided
  • Nesting $addToSet inside $push incorrectly
  • Forgetting $each when adding multiple items