Mi sono appena imbattuto in questo problema da solo. Non sono riuscito a trovare una soluzione a una chiamata, ma ho trovato una soluzione a due chiamate che funziona quando hai un valore univoco negli elementi dell'array . Usa il $pull
prima il comando, che rimuove gli elementi da un array, e poi $push
.
db.soup.update({
"tester":"tom"
}, {
$pull: {
'array': {
"id": "3"
}
}
})
db.soup.update({
"tester":"tom"
}, {
$push: {
'array': {
"id": "3",
"letter": "d"
}
}
})
Questo dovrebbe funzionare quando il documento non esiste, quando il documento esiste ma la voce nell'array non esiste e quando la voce esiste.
Ancora una volta, funziona solo se hai qualcosa, come l'id
campo in questo esempio, che dovrebbe essere univoco tra gli elementi dell'array.