Suponha que temos a seguinte coleção, sobre a qual tenho poucas perguntas:
{
"_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 - Quero aumentar o preço de "item_name": "my_item_two" e, se não existir , deve ser anexado à matriz "items".
2 - Como posso atualizar dois campos ao mesmo tempo. Por exemplo, aumente o preço de "my_item_three" e, ao mesmo tempo, aumente o "total" (com o mesmo valor).
Prefiro fazer isso no lado do MongoDB, caso contrário, tenho que carregar o documento no lado do cliente (Python) e construir o documento atualizado e substituí-lo pelo existente no MongoDB.
ATUALIZAÇÃO Isto é o que eu tentei e funciona bem se o objeto existe :
db.test_invoice.update({user_id : 123456 , "items.item_name":"my_item_one"} , {$inc: {"items.$.price": 10}})
Mas se a chave não existe, não faz nada. Também atualiza apenas o objeto aninhado. Não há como este comando atualizar o campo "total" também.