Verwenden Sie $addToSet statt $push .
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)
BEARBEITEN:
Es gibt keinen einfachen integrierten Ansatz für die bedingte Aktualisierung von Unterdokumenten in einem Array-Feld nach bestimmten Eigenschaften. Ein kleiner Trick kann jedoch die Arbeit erledigen, indem zwei Befehle nacheinander ausgeführt werden.
Zum Beispiel:Wenn wir die quizzes aktualisieren wollen Feld mit dem Objekt { "wk": 7.0, "score": 8.0 } , können wir dies in zwei Schritten tun:
Schritt-1: $pull Unterdokumente aus den quizzes herausholen Array, wobei "wk": 7.0 . (Nichts passiert, wenn kein passendes Unterdokument gefunden wird ).
db.push.update(
{ _id: 5 },
{ $pull: { "quizzes": { "wk": 7.0 } } }
)
Schritt-2: $addToSet das Unterdokument.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)
Sie können die beiden obigen Update-Befehle mit bulk.find().update() kombinieren