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