Für neue Artikel
db.cmpe285.update({"username":username}, {"$push": {"stocks":{"name":stock_symbol,"count":allotment,"price":initial_share_price}}})
Zum Aktualisieren vorhandener Elemente , vorausgesetzt, Sie aktualisieren die Zuteilung. Sie müssen den Positionsoperator ($) mit dem Array-Wert verwenden, auf den in der Abfrage verwiesen wird.
db.cmpe285.update({"username":username, "stocks.name":stock_symbol}, {"$set": {"stocks.$.count":allotment2}})
Zum Upserting von Artikeln , es ist ein 2-stufiger Prozess. Sie müssen zuerst die Abfrage auf die gleiche Weise wie oben zum Aktualisieren vorhandener Elemente ausführen und die Antwort auf das Schreibergebnis der obigen Abfrage sowie die geänderte Anzahl überprüfen. Wenn die modifizierte Anzahl 0 ist, bedeutet das, dass wir ein Upsert durchführen müssen, und dann tun Sie es einfach so, als ob Sie neue Elemente hinzufügen würden.
db.cmpe285.update({"username":username, "stocks.name":stock_symbol}, {"$set": {"stocks.$.count":allotment2}})
Überprüfen Sie das WriteResult , wenn nmodified gleich 0 ist.
db.cmpe285.update({"username":username}, {"$push": {"stocks":{"name":stock_symbol,"count":allotment2,"price":initial_share_price}}})
Wenn nmodified gleich 1 ist, war das Upserting erfolgreich.