I've got a document that looks like this:
db.blog.findOne()
{
"_id" : ObjectId("4dc1c938c4bfb4d21a000001"),
"blogid" : 1,
"body" : "Lorem ipsum dolor",
"comments" : [
{
"id" : 1,
"name" : "Alex",
"comment" : "Test",
"approved" : 1
},
{
"id" : 2,
"name" : "Phil",
"comment" : "Test",
"approved" : 1
},
{
"id" : 3,
"name" : "Joe",
"comment" : "Test",
"approved" : 0
}
],
"no_comments" : 11,
"title" : "Hello world"
}
If I run the query
db.blog.update({'blogid':1}, { $pull : { 'comments' : {'approved' : 0} } });
Then it will remove the third comment.
If instead I want to pull all comments where approved is 0 or 1 the following query doesn't work:
db.blog.update({'blogid':1}, { $pullAll : { 'comments' : {'approved' : [0,1]} } });
I get the error
Modifier $pushAll/pullAll allowed for arrays only
Can someone please explain where I'm going wrong?
Thank you
The $pullAll operator: The $pullAll operator removes all the elements from the defined array. Now, use the following query to remove all values of 8 from the array where _id is 1. We can verify this by checking the collection using the find() method. We have successfully removed element 8 from the array in document 1.
The $pull operator removes from an existing array all instances of a value or values that match a specified condition. The $pull operator has the form: { $pull: { <field1>: <value|condition>, <field2>: <value|condition>, ... } } To specify a <field> in an embedded document or in an array, use dot notation.
db.blog.update({"blogid":1},{$pullAll:{"comments":{"name":"Phil","comment":{$eq:"Test"}}}})
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 2,
"errmsg" : "$pullAll requires an array argument but was given a object"
}
})
db.blog.update({"blogid":1},{$pull:{"comments":{"name":"Phil","comment":{$eq:"Test"}}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
$pull update operator:
$pullAll update operator:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With