Jag stötte precis på det här problemet själv. Jag kunde inte hitta en ensamtalslösning, men jag hittade en tvåanropslösning som fungerar när du har ett unikt värde i dina arrayelement . Använd $pull
kommandot först, som tar bort element från en array och sedan $push
.
db.soup.update({
"tester":"tom"
}, {
$pull: {
'array': {
"id": "3"
}
}
})
db.soup.update({
"tester":"tom"
}, {
$push: {
'array': {
"id": "3",
"letter": "d"
}
}
})
Detta bör fungera när dokumentet inte finns, när dokumentet finns men posten i arrayen inte finns, och när posten finns.
Återigen, detta fungerar bara om du har något, som id
fältet i det här exemplet, som ska vara unikt för alla element i arrayen.