Usa $addToSet
invece di $push
.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)
MODIFICA:
Non esiste un approccio integrato semplice per l'aggiornamento condizionale di documenti secondari in un campo matrice, in base a una proprietà specifica. Tuttavia, un piccolo trucco può fare il lavoro eseguendo due comandi in sequenza.
Ad esempio:se vogliamo aggiornare i quizzes
campo con l'oggetto { "wk": 7.0, "score": 8.0 }
, possiamo farlo in due passaggi:
Passaggio-1: $pull
fuori documenti secondari dai quizzes
array dove "wk": 7.0
. (Non succede nulla se il documento secondario corrispondente non viene trovato ).
db.push.update(
{ _id: 5 },
{ $pull: { "quizzes": { "wk": 7.0 } } }
)
Passaggio-2: $addToSet
il documento secondario.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)
Puoi combinare i due comandi di aggiornamento precedenti usando bulk.find().update()