我在db toolname
中有许多文档(通过唯一test
)具有以下结构:
{
"_id" : ObjectId("111111111111"),
"toolname" : "hammer",
"abilities" : [
{
"foo" : "blue",
"bar" : "beagle",
"LOE" : 0.65
},
{
"foo" : "red",
"bar" : "beagle",
"LOE" : 0.57
},
{
"foo" : "red",
"bar" : "fish",
"LOE" : 0.42
}
]
}
我可以使用以下查询find
此文档:
db.test.find({"abilities.bar":"beagle","abilities.foo":"red"})
我想要做的是更新我在LOE
查询中设置的两个参数匹配的find
。例如 - "abilities.bar":"beagle"
和"abilities.foo":"red"
,将该对象中的"LOE"
更新为.99
。
Mongo是否有内置函数,只有当该对象中的另一个键等于某个值时才可以设置键的值?或者我是否需要创建一个客户端函数来返回数组索引和update
基于此?例如:
some function(){...}
db.test.update({"abilities.bar":"beagle","abilities.foo":"red"}
{ $set: { "abilities[x].LOE" : .99 } }
)
答案 0 :(得分:2)
使用$elemMatch,如下所示:
db.collection.update({"abilities":{"$elemMatch":{"bar":"beagle","foo":"red"}}},
{"$set":{"abilities.$.LOE":0.99}})