Aşağıdaki koleksiyona sahip olduğumuzu varsayalım, bu konuda birkaç sorum var:
{
"_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" için fiyatı artırmak istiyorum ve eğer mevcut değilse , "items" dizisine eklenmelidir.
2 - İki alanı aynı anda nasıl güncelleyebilirim. Örneğin, "my_item_three" fiyatını artırın ve aynı zamanda "toplam" ı (aynı değerle) artırın.
Bunu MongoDB tarafında yapmayı tercih ederim, aksi takdirde belgeyi istemci tarafına (Python) yüklemek ve güncellenmiş belgeyi oluşturmak ve MongoDB'deki mevcut belgeyle değiştirmek zorundayım.
GÜNCELLEME Nesne Varsa denedim ve iyi çalışıyor :
db.test_invoice.update({user_id : 123456 , "items.item_name":"my_item_one"} , {$inc: {"items.$.price": 10}})
Ancak anahtar yoksa hiçbir şey yapmaz. Ayrıca yalnızca iç içe geçmiş nesneyi güncelleştirir. Bu komutla "toplam" alanını da güncellemenin bir yolu yoktur.