【发布时间】:2012-05-18 08:06:18
【问题描述】:
假设我们有以下集合,我对此没有几个问题:
{
"_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" 的价格 如果它不存在,它应该附加到 "items" 数组中。
-
如何同时更新两个字段?例如,增加“my_item_three”的价格,同时增加“total”(具有相同的值)。
我更喜欢在 MongoDB 端执行此操作,否则我必须在客户端 (Python) 中加载文档并构建更新的文档并将其替换为 MongoDB 中的现有文档。
这是我尝试过的并且工作正常如果对象存在:
db.test_invoice.update({user_id : 123456 , "items.item_name":"my_item_one"} , {$inc: {"items.$.price": 10}})
但是,如果密钥不存在,它什么也不做。 此外,它只更新嵌套对象。此命令也无法更新“总计”字段。
【问题讨论】:
-
我认为您不能在 mongo 中执行此操作,除非使用 eval 可能会很痛苦。 Mongo 在数据操作方面非常有限。
-
@Haapala: mongodb 有 $inc 并使用 upsert 更新
-
@jdi 是的 是的,但是在这里帮不上什么忙,但是他需要的是多个$incs,有条件的,如果item不存在,那么就需要一个$push。
标签: mongodb