Per i nuovi articoli
db.cmpe285.update({"username":username}, {"$push": {"stocks":{"name":stock_symbol,"count":allotment,"price":initial_share_price}}})
Per aggiornare gli elementi esistenti , supponendo che tu stia aggiornando l'assegnazione. è necessario utilizzare l'operatore posizionale($) con il valore dell'array a cui si fa riferimento nella query.
db.cmpe285.update({"username":username, "stocks.name":stock_symbol}, {"$set": {"stocks.$.count":allotment2}})
Per aggiornare gli articoli , è un processo in 2 fasi. Dovrai prima eseguire la query nello stesso modo in cui lo fai per aggiornare gli elementi esistenti come sopra e controllare la risposta del risultato di scrittura dalla query precedente e controllare il conteggio modificato. Se il conteggio modificato è 0 significa che dobbiamo eseguire l'upsert e quindi lo farai semplicemente come nel caso dell'aggiunta di nuovi elementi.
db.cmpe285.update({"username":username, "stocks.name":stock_symbol}, {"$set": {"stocks.$.count":allotment2}})
Controlla il WriteResult , se nmodificato uguale a 0.
db.cmpe285.update({"username":username}, {"$push": {"stocks":{"name":stock_symbol,"count":allotment2,"price":initial_share_price}}})
Se nmodificato è uguale a 1, upserting riuscito.