最佳答案
假设我们有以下收集,我有几个问题:
{
"_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”;如果它不存在,它应该被添加到"item "数组中。
如何同时更新两个字段?例如,提高“my_item_three”的价格;同时增加“总数”;(值相同)。
我更喜欢在MongoDB端这样做,否则我必须在客户端(Python)加载文档,并构造更新的文档,并将其替换为MongoDB中的现有文档。
这是我尝试过的,工作良好如果对象存在:
db.test_invoice.update({user_id : 123456 , "items.item_name":"my_item_one"} , {$inc: {"items.$.price": 10}})
但是,如果键不存在,则不执行任何操作。
而且,它只更新嵌套对象。使用此命令无法更新“total”;