Sám jsem na tento problém narazil. Nepodařilo se mi najít řešení s jedním voláním, ale našel jsem řešení se dvěma voláními, které funguje když máte v prvcích pole jedinečnou hodnotu . Použijte $pull
nejprve příkaz, který odstraní prvky z pole, a poté $push
.
db.soup.update({
"tester":"tom"
}, {
$pull: {
'array': {
"id": "3"
}
}
})
db.soup.update({
"tester":"tom"
}, {
$push: {
'array': {
"id": "3",
"letter": "d"
}
}
})
To by mělo fungovat, když dokument neexistuje, když dokument existuje, ale položka v poli neexistuje, a když položka existuje.
Opět to funguje pouze v případě, že něco máte, například id
pole v tomto příkladu, které by mělo být jedinečné napříč prvky pole.