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