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()