Pro nové položky
db.cmpe285.update({"username":username}, {"$push": {"stocks":{"name":stock_symbol,"count":allotment,"price":initial_share_price}}})
Pro aktualizaci stávajících položek , za předpokladu, že aktualizujete přidělení. musíte použít poziční operátor ($) s hodnotou pole odkazovanou v dotazu.
db.cmpe285.update({"username":username, "stocks.name":stock_symbol}, {"$set": {"stocks.$.count":allotment2}})
Pro upserting položek , je to proces ve 2 krocích. Nejprve budete muset spustit dotaz stejným způsobem jako pro aktualizaci existujících položek, jak je uvedeno výše, a zkontrolovat odpověď na výsledek zápisu z výše uvedeného dotazu a zkontrolovat upravený počet. Pokud je upravený počet 0, znamená to, že musíme upsert a pak to uděláte stejně jako v případě přidávání nových položek.
db.cmpe285.update({"username":username, "stocks.name":stock_symbol}, {"$set": {"stocks.$.count":allotment2}})
Zkontrolujte WriteResult , pokud je nmodifikováno rovno 0.
db.cmpe285.update({"username":username}, {"$push": {"stocks":{"name":stock_symbol,"count":allotment2,"price":initial_share_price}}})
Pokud se nmodified rovná 1, upserting byl úspěšný.