1. $pull modifier deletes qualifying elements from the array in the following format:
{ $pull: { <field1>: <value|condition>, <field2>: <value|condition>, ... } }
2. Specify a value to delete all lists
Give a document under a stores collection
Update the "apples" and "oranges" of all documents in the collection stores in the array fruits and delete the "carrots" in the array vegetables as follows{ _id: 1, fruits: [ "apples", "pears", "oranges", "grapes", "bananas" ], vegetables: [ "carrots", "celery", "squash", "carrots" ] } { _id: 2, fruits: [ "plums", "kiwis", "oranges", "bananas", "apples" ], vegetables: [ "broccoli", "zucchini", "carrots", "onions" ] }
db.stores.update( { }, { $pull: { fruits: { $in: [ "apples", "oranges" ] }, vegetables: "carrots" } }, { multi: true } )
The result of the operation is:
3. $pull deletes all eligible elements{ "_id" : 1, "fruits" : [ "pears", "grapes", "bananas" ], "vegetables" : [ "celery", "squash" ] } { "_id" : 2, "fruits" : [ "plums", "kiwis", "bananas" ], "vegetables" : [ "broccoli", "zucchini", "onions" ] }
Collection documents based on collection profiles
{ _id: 1, votes: [ 3, 5, 6, 7, 7, 8 ] }
The following deletes elements in the votes array that have elements greater than or equal to 6
db.profiles.update( { _id: 1 }, { $pull: { votes: { $gte: 6 } } } )
All elements in the array after the operation are less than 6
{ _id: 1, votes: [ 3, 5 ] }
4. Remove elements from an array nested document
A survey collection contains the following documents
{ _id: 1, results: [ { item: "A", score: 5 }, { item: "B", score: 8, comment: "Strongly agree" } ] } { _id: 2, results: [ { item: "C", score: 8, comment: "Strongly agree" }, { item: "B", score: 4 } ] }
Document collections with element item equal to B and element score equal to 8 in array results will be deleted as follows
db.survey.update( { }, { $pull: { results: { score: 8 , item: "B" } } }, { multi: true } )
The result of the operation is:
{ "_id" : 1, "results" : [ { "item" : "A", "score" : 5 } ] } { "_id" : 2, "results" : [ { "item" : "C", "score" : 8, "comment" : "Strongly agree" }, { "item" : "B", "score" : 4 } ] }
5. The following set document is the array set array type
{ _id: 1, results: [ { item: "A", score: 5, answers: [ { q: 1, a: 4 }, { q: 2, a: 6 } ] }, { item: "B", score: 8, answers: [ { q: 1, a: 8 }, { q: 2, a: 9 } ] } ] } { _id: 2, results: [ { item: "C", score: 8, answers: [ { q: 1, a: 8 }, { q: 2, a: 7 } ] }, { item: "B", score: 4, answers: [ { q: 1, a: 0 }, { q: 2, a: 8 } ] } ] }
You can use $elemMatch to match multiple conditions
db.survey.update( { }, { $pull: { results: { answers: { $elemMatch: { q: 2, a: { $gte: 8 } } } } } }, { multi: true } )
The result of the operation is:
{ "_id" : 1, "results" : [ { "item" : "A", "score" : 5, "answers" : [ { "q" : 1, "a" : 4 }, { "q" : 2, "a" : 6 } ] } ] } { "_id" : 2, "results" : [ { "item" : "C", "score" : 8, "answers" : [ { "q" : 1, "a" : 8 }, { "q" : 2, "a" : 7 } ] } ] }