次のコレクションがあると仮定します。
{
"_id" : ObjectId("4faaba123412d654fe83hg876"),
"user_id" : 123456,
"total" : 100,
"items" : [
{
"item_name" : "my_item_one",
"price" : 20
},
{
"item_name" : "my_item_two",
"price" : 50
},
{
"item_name" : "my_item_three",
"price" : 30
}
]
}
1-「item_name」:「my_item_two」の価格を上げたいのですが、存在しない場合は、「items」配列に追加する必要があります。
2-2つのフィールドを同時に更新するにはどうすればよいですか。たとえば、「my_item_three」の価格を引き上げると同時に、「合計」を引き上げます(値は同じ)。
私はこれをMongoDB側で行うことを好みます。そうでない場合は、クライアント側(Python)でドキュメントをロードし、更新されたドキュメントを作成して、MongoDBの既存のドキュメントと置き換える必要があります。
更新 これは私が試したものであり、オブジェクトが存在する場合は正常に動作します:
db.test_invoice.update({user_id : 123456 , "items.item_name":"my_item_one"} , {$inc: {"items.$.price": 10}})
しかし、キーが存在しない場合は何もしません。また、ネストされたオブジェクトのみを更新します。このコマンドでは、「合計」フィールドも更新する方法はありません。