Nowe przedmioty
db.cmpe285.update({"username":username}, {"$push": {"stocks":{"name":stock_symbol,"count":allotment,"price":initial_share_price}}})
Do aktualizacji istniejących elementów , zakładając, że aktualizujesz przydział. musisz użyć operatora pozycyjnego ($) z wartością tablicy, do której odwołuje się zapytanie.
db.cmpe285.update({"username":username, "stocks.name":stock_symbol}, {"$set": {"stocks.$.count":allotment2}})
Do odwracania elementów , jest to proces dwuetapowy. Najpierw musisz uruchomić zapytanie w taki sam sposób, jak w przypadku aktualizacji istniejących elementów, jak powyżej, i sprawdzić odpowiedź wyniku zapisu z powyższego zapytania i sprawdzić zmodyfikowaną liczbę. Jeśli zmodyfikowana liczba wynosi 0, oznacza to, że musimy upsertować, a następnie zrobisz to tak, jak w przypadku dodawania nowych elementów.
db.cmpe285.update({"username":username, "stocks.name":stock_symbol}, {"$set": {"stocks.$.count":allotment2}})
Sprawdź WriteResult , jeśli nmmodyfikowana równa 0.
db.cmpe285.update({"username":username}, {"$push": {"stocks":{"name":stock_symbol,"count":allotment2,"price":initial_share_price}}})
Jeśli nmodified jest równe 1, upserterowanie powiodło się.