假设我们有以下的集合,我有几个问题: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是需要。 –