Bird
Raised Fist0
MongoDBquery~10 mins

$pull operator for removing from arrays in MongoDB - Step-by-Step Execution

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
Concept Flow - $pull operator for removing from arrays
Start with document
Identify array field
Apply $pull with condition
Scan array elements
Remove elements matching condition
Update document with new array
End with updated document
The $pull operator scans an array field in a document and removes all elements that match a given condition, then updates the document with the filtered array.
Execution Sample
MongoDB
db.collection.updateOne(
  { _id: 1 },
  { $pull: { scores: { $lt: 50 } } }
)
This command removes all elements less than 50 from the 'scores' array in the document with _id 1.
Execution Table
StepActionArray BeforeConditionElements RemovedArray After
1Locate document with _id=1[80, 45, 60, 30, 90]$lt: 50N/A[80, 45, 60, 30, 90]
2Scan array elements[80, 45, 60, 30, 90]$lt: 50Check each element[80, 45, 60, 30, 90]
3Remove elements less than 50[80, 45, 60, 30, 90]$lt: 50[45, 30][80, 60, 90]
4Update document with new array[80, 60, 90]$lt: 50[45, 30][80, 60, 90]
5Operation complete[80, 60, 90]$lt: 50[45, 30][80, 60, 90]
💡 All elements checked and matching elements removed; array updated.
Variable Tracker
VariableStartAfter Step 3Final
scores array[80, 45, 60, 30, 90][80, 60, 90][80, 60, 90]
elements removed[][45, 30][45, 30]
Key Moments - 3 Insights
Why does $pull remove multiple elements, not just the first one?
Because $pull scans the entire array and removes all elements matching the condition, as shown in execution_table rows 2 and 3 where both 45 and 30 are removed.
What happens if no elements match the $pull condition?
No elements are removed and the array stays the same, like in execution_table row 1 where the array is intact before removal.
Does $pull modify the original array or create a new one?
$pull updates the array in place by removing matching elements, effectively replacing the original array with the filtered one, as seen in execution_table row 4.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the 'scores' array after step 3?
A[80, 45, 60, 30, 90]
B[80, 60, 90]
C[45, 30]
D[]
💡 Hint
Check the 'Array After' column in row 3 of the execution_table.
At which step does the $pull operator actually remove elements from the array?
AStep 3
BStep 1
CStep 2
DStep 5
💡 Hint
Look for the step where 'Elements Removed' shows actual values in the execution_table.
If the condition was $gt: 100 (greater than 100), how would the 'Array After' change at step 3?
AIt would be empty []
BIt would remove all elements
CIt would be unchanged [80, 45, 60, 30, 90]
DIt would remove only elements less than 50
💡 Hint
Refer to the condition and elements removed columns in the execution_table.
Concept Snapshot
$pull operator removes all array elements matching a condition.
Syntax: { $pull: { arrayField: condition } }
It scans entire array and removes matching elements.
Updates document with filtered array.
Does not remove elements not matching condition.
Useful for cleaning arrays inside documents.
Full Transcript
The $pull operator in MongoDB is used to remove elements from an array field inside a document. It works by scanning the array and removing all elements that match a specified condition. For example, if you want to remove all scores less than 50 from a scores array, $pull will find and remove those elements, then update the document with the new array. The process starts by locating the document, then scanning the array, removing matching elements, and finally updating the document. If no elements match, the array remains unchanged. This operator modifies the array in place by replacing it with the filtered version. Understanding this helps in managing arrays inside MongoDB documents effectively.

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

  1. Step 1: Understand the purpose of $pull

    The $pull operator is used to remove elements from an array that match a given condition.
  2. Step 2: Compare with other array operators

    Unlike $push which adds elements, $pull removes matching elements without affecting others.
  3. Final Answer:

    Removes all array elements that match a specified condition. -> Option A
  4. Quick Check:

    $pull = Remove matching elements [OK]
Hint: Remember: $pull always removes matching array items [OK]
Common Mistakes:
  • Confusing $pull with $push (which adds elements)
  • Thinking $pull replaces the whole array
  • Assuming $pull sorts or modifies elements
2. Which of the following is the correct syntax to remove the value 5 from the array field numbers in MongoDB?
easy
A. db.collection.updateOne({}, {$pull: {numbers: 5}})
B. db.collection.updateOne({}, {$pull: {numbers: {$ne: 5}}})
C. db.collection.updateOne({}, {$remove: {numbers: 5}})
D. db.collection.updateOne({}, {$pop: {numbers: 5}})

Solution

  1. Step 1: Identify the correct operator and syntax

    The $pull operator removes elements matching the value directly, so {$pull: {numbers: 5}} is correct.
  2. Step 2: Check other options for errors

    db.collection.updateOne({}, {$pop: {numbers: 5}}) uses $pop which only removes first/last elements. db.collection.updateOne({}, {$pull: {numbers: {$ne: 5}}}) uses {$ne: 5} inside $pull which removes non-matching elements. db.collection.updateOne({}, {$remove: {numbers: 5}}) uses invalid $remove operator.
  3. Final Answer:

    db.collection.updateOne({}, {$pull: {numbers: 5}}) -> Option A
  4. 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

  1. Step 1: Understand $pull removes all matching elements

    The $pull operator removes every element equal to "blue" from the array.
  2. 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.
  3. Final Answer:

    ["red", "green"] -> Option D
  4. 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

  1. Step 1: Understand the condition to remove numbers less than 10

    The correct condition is {$lt: 10} to remove numbers less than 10.
  2. 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.
  3. Final Answer:

    db.collection.updateOne({}, {$pull: {scores: { $gte: 10 }}}) -> Option C
  4. 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

  1. Step 1: Identify the condition to remove items with qty 0

    We want to remove array elements where the field qty equals 0.
  2. 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.
  3. Final Answer:

    db.collection.updateMany({}, {$pull: {items: {qty: 0}}}) -> Option B
  4. 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)
  • Using $ne or $gt incorrectly inside $pull
  • Confusing $pull with $push or $pop