更新键值,其中不同的键等于某个值

时间:2015-07-07 15:54:31

标签: javascript mongodb

我在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 } }
)

1 个答案:

答案 0 :(得分:2)

使用$elemMatch,如下所示:

db.collection.update({"abilities":{"$elemMatch":{"bar":"beagle","foo":"red"}}},
                     {"$set":{"abilities.$.LOE":0.99}})