Gebruik $addToSet
in plaats van $push
.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)
BEWERKEN:
Er is geen eenvoudige ingebouwde benadering voor het bijwerken van voorwaardelijke subdocumenten in een arrayveld, door specifieke eigenschap. Een klein trucje kan het werk echter doen door twee opdrachten achter elkaar uit te voeren.
Bijvoorbeeld:Als we de quizzes
willen bijwerken veld met het object { "wk": 7.0, "score": 8.0 }
, we kunnen het in twee stappen doen:
Stap-1: $pull
subdocumenten uit de quizzes
array waar "wk": 7.0
. (Er gebeurt niets als het overeenkomende subdocument niet wordt gevonden ).
db.push.update(
{ _id: 5 },
{ $pull: { "quizzes": { "wk": 7.0 } } }
)
Stap-2: $addToSet
het subdocument.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)
U kunt de bovenstaande twee update-commando's combineren met de bulk.find().update()