MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Aktualisieren Sie das Element im Array, falls vorhanden, sonst fügen Sie ein neues Element in dieses Array in MongoDb ein

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