I have this document
{
"_id" : ObjectId("56877d72572434211f8c579e"),
"hola" : {
"nombres" : [
"andres",
"jose"
]
},
"id" : "8888",
"aloh" : [
{
"saludo" : [
{
"qwe" : "rty",
"sad" : "fet"
},
{
"dvo" : "rak",
"foo" : "foo"
}
]
},
{
"despedida" : "bye"
}
]
}
And I want to delete just the object that contains
{
"qwe" : "rty",
"sad" : "fet"
}
I'm trying using $pull and $elemMatch like this:
db.collection.update(
{ "id":"8888" },
{ "$pull": { "aloh": { "saludo": { "$elemMatch": { "qwe": "rty" } } } } }
)
But it eliminates all the parent array and I want it to output something like this:
{
"_id" : ObjectId("56877d72572434211f8c579e"),
"hola" : {
"nombres" : [
"andres",
"jose"
]
},
"id" : "8888",
"aloh" : [
{
"saludo" : [
{
"dvo" : "rak",
"foo" : "foo"
}
]
},
{
"despedida" : "bye"
}
]
}
Following query will work
db.collection.update(
{ "id":"8888" },
{
$pull: {
"aloh.0.saludo": {
"qwe": "rty",
"sad": "fet"
}
}
});
It's in situation like this that you use the positional $
update operator. One thing to note is that the array field must appear as part of the query document. That is what explain the use of $exists
here.
db.collection.update(
{ "id": "8888", "aloh.saludo": { "$exists": true } },
{ "$pull": { "aloh.$.saludo": { "qwe": "rty", "sad": "fet" } } }
)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.