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
$pull Operator to Remove Items from Arrays in MongoDB
📖 Scenario: You manage a MongoDB collection that stores information about a library's book catalog. Each book document has a list of genres it belongs to. Sometimes, you need to remove a specific genre from a book's list when it no longer fits.
🎯 Goal: Learn how to use the $pull operator in MongoDB to remove a specific item from an array field inside documents.
📋 What You'll Learn
Create a collection named books with one document containing a genres array
Define a variable with the genre name to remove
Use the $pull operator in an update query to remove the specified genre from the array
Verify the update query targets the correct document and field
💡 Why This Matters
🌍 Real World
Managing and updating array data in MongoDB documents is common in real-world applications like user preferences, tags, or categories.
💼 Career
Understanding how to modify arrays with $pull is essential for database administrators and backend developers working with MongoDB.
Progress0 / 4 steps
1
Create the books collection with one document
Create a collection called books and insert one document with title set to 'The Great Adventure' and genres array containing 'Fantasy', 'Adventure', and 'Action'.
MongoDB
Hint
Use db.books.insertOne() with an object containing title and genres array.
2
Define the genre to remove
Create a variable called genreToRemove and set it to the string 'Adventure'.
MongoDB
Hint
Use const genreToRemove = 'Adventure' to store the genre name.
3
Use $pull to remove the genre from the array
Write an update query using db.books.updateOne() to find the document with title equal to 'The Great Adventure' and use the $pull operator to remove the genre stored in genreToRemove from the genres array.
MongoDB
Hint
Use db.books.updateOne() with a filter on title and $pull to remove the genre.
4
Confirm the update query targets the correct document
Add a query to find the document with title equal to 'The Great Adventure' to verify the genres array no longer contains 'Adventure'.
MongoDB
Hint
Use db.books.findOne() with the filter on title to check the document.
Practice
(1/5)
1. What does the $pull operator do in MongoDB?
easy
A. Removes all array elements that match a specified condition.
B. Adds new elements to an array.
C. Replaces the entire array with a new one.
D. Sorts the elements inside an array.
Solution
Step 1: Understand the purpose of $pull
The $pull operator is used to remove elements from an array that match a given condition.
Step 2: Compare with other array operators
Unlike $push which adds elements, $pull removes matching elements without affecting others.
Final Answer:
Removes all array elements that match a specified condition. -> Option A
db.collection.updateOne({}, {$pull: {numbers: 5}}) -> Option A
Quick Check:
Simple value removal uses $pull: {field: value} [OK]
Hint: Use $pull: {field: value} to remove simple values [OK]
Common Mistakes:
Using $remove instead of $pull
Using $pop which removes first or last element only
Adding unnecessary query operators for simple values
3. Given the document { _id: 1, tags: ["red", "blue", "green", "blue"] }, what will be the tags array after running db.collection.updateOne({_id: 1}, {$pull: {tags: "blue"}})?
medium
A. ["blue", "blue"]
B. ["red", "blue", "green"]
C. ["red", "green", "blue"]
D. ["red", "green"]
Solution
Step 1: Understand $pull removes all matching elements
The $pull operator removes every element equal to "blue" from the array.
Step 2: Remove all "blue" elements from the array
Original array: ["red", "blue", "green", "blue"]. After removal: ["red", "green"] because both "blue" elements are removed.
Final Answer:
["red", "green"] -> Option D
Quick Check:
All "blue" removed = ["red", "green"] [OK]
Hint: Remember $pull removes all matching elements, not just one [OK]
Common Mistakes:
Removing only the first matching element
Leaving one "blue" element by mistake
Confusing $pull with $pop or $pullAll
4. You want to remove all numbers less than 10 from the array field scores. Which of the following update commands will NOT work correctly?
medium
A. db.collection.updateOne({}, {$pull: {scores: { $lt: 10 }}})
B. db.collection.updateOne({}, {$pull: {scores: {$lt: 10}}})
C. db.collection.updateOne({}, {$pull: {scores: { $gte: 10 }}})
D. db.collection.updateOne({}, {$pull: {scores: {$lt:10}}})
Solution
Step 1: Understand the condition to remove numbers less than 10
The correct condition is {$lt: 10} to remove numbers less than 10.
Step 2: Analyze each option
Options B, C, and D use {$lt: 10} correctly. db.collection.updateOne({}, {$pull: {scores: { $gte: 10 }}}) uses {$gte: 10}, which removes numbers greater than or equal to 10, the opposite of the goal.
Final Answer:
db.collection.updateOne({}, {$pull: {scores: { $gte: 10 }}}) -> Option C
Quick Check:
Use $lt to remove less than 10, not $gte [OK]
Hint: Use correct comparison operator inside $pull condition [OK]
Common Mistakes:
Using wrong comparison operator ($gte instead of $lt)
Confusing $pull condition syntax
Repeating same option without change (typo)
5. Consider documents with a field items containing objects like {name: "apple", qty: 5}. How would you remove all items where qty is 0 using $pull?
hard
A. db.collection.updateMany({}, {$pull: {items: {qty: {$ne: 0}}}})
B. db.collection.updateMany({}, {$pull: {items: {qty: 0}}})
C. db.collection.updateMany({}, {$pull: {items: {name: "apple"}}})
D. db.collection.updateMany({}, {$pull: {items: {qty: {$gt: 0}}}})
Solution
Step 1: Identify the condition to remove items with qty 0
We want to remove array elements where the field qty equals 0.
Step 2: Use $pull with a query object matching qty: 0
The correct syntax is {$pull: {items: {qty: 0}}} which removes all objects with qty 0.
Final Answer:
db.collection.updateMany({}, {$pull: {items: {qty: 0}}}) -> Option B
Quick Check:
Match exact condition inside $pull to remove objects [OK]
Hint: Use $pull with object condition to remove matching objects [OK]
Common Mistakes:
Removing by wrong field (like name instead of qty)