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