新しいアイテムの場合
db.cmpe285.update({"username":username}, {"$push": {"stocks":{"name":stock_symbol,"count":allotment,"price":initial_share_price}}})
既存のアイテムを更新するため 、割り当てを更新していると仮定します。クエリで参照される配列値で定位置演算子($)を使用する必要があります。
db.cmpe285.update({"username":username, "stocks.name":stock_symbol}, {"$set": {"stocks.$.count":allotment2}})
アイテムのアップサーティング用 、その2ステップのプロセス。最初に、上記のように既存のアイテムを更新する場合と同じ方法でクエリを実行し、上記のクエリからの書き込み結果の応答を調べて、変更されたカウントを確認する必要があります。変更されたカウントが0の場合は、アップサートする必要があることを意味し、新しいアイテムを追加する場合と同じように行います。
db.cmpe285.update({"username":username, "stocks.name":stock_symbol}, {"$set": {"stocks.$.count":allotment2}})
WriteResult を確認してください 、nmodifiedが0に等しい場合。
db.cmpe285.update({"username":username}, {"$push": {"stocks":{"name":stock_symbol,"count":allotment2,"price":initial_share_price}}})
nmodifiedが1に等しい場合、アップサーティングは成功しました。