Brug $addToSet
i stedet for $push
.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)
EDIT:
Der er ingen enkel indbygget tilgang til betinget underdokumentopdatering i et array-felt efter specifik egenskab. Et lille trick kan dog gøre jobbet ved at udføre to kommandoer i rækkefølge.
For eksempel:Hvis vi ønsker at opdatere quizzes
felt med objektet { "wk": 7.0, "score": 8.0 }
, vi kan gøre det i to trin:
Trin-1: $pull
ud af underdokumenter fra quizzes
array hvor "wk": 7.0
. (Der sker ikke noget, hvis det matchende underdokument ikke findes ).
db.push.update(
{ _id: 5 },
{ $pull: { "quizzes": { "wk": 7.0 } } }
)
Trin-2: $addToSet
underdokumentet.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)
Du kan kombinere ovenstående to opdateringskommandoer ved at bruge bulk.find().update()