假設我們有以下的集合,我有幾個問題:MongoDB的 - 在一個文檔的數組(嵌套更新)更新對象
{
"_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 - 我如何更新在同一時間兩個字段。例如,增加「my_item_three」的價格,同時增加「總數」(具有相同的值)。
我喜歡做這樣的MongoDB的一面,否則我必須加載客戶端(Python)的文檔,構建更新的文檔,並與MongoDB中現有的更換。
UPDATE 這是我曾嘗試和如果對象存在工作正常:
db.test_invoice.update({user_id : 123456 , "items.item_name":"my_item_one"} , {$inc: {"items.$.price": 10}})
但是,如果該鍵不存在,它什麼都不做。 此外它只更新嵌套的對象。此命令也無法更新「總計」字段。
我覺得有太多的痛苦使用eval你不能做到這一點蒙戈,也許除了。 Mongo在數據操作中非常有限。 –
@Haapala:mongodb有$ inc並且用upsert更新 – jdi
@jdi是的,但這對這裏沒有多大幫助,但是他需要的是多個$ incs,有條件的,如果該項不存在,那麼$ push是需要。 –