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

标签 javascript mongodb

我有许多具有以下结构的文档(通过唯一的工具名称),在db 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
            }
        ]
    }

我可以使用以下查询找到此文档:

db.test.find({"abilities.bar":"beagle","abilities.foo":"red"})

我想要做的是更新 LOE,其中我在上面的 find 查询中设置的两个参数匹配。例如 - 如果 "powereds.bar":"beagle""powereds.foo":"red",则更新 "LOE"将该对象中的 .99

Mongo 是否有一个内置函数,您可以仅在该对象中的另一个键等于某个值时设置键的值?或者我是否需要创建一个客户端函数来返回数组索引并基于该索引进行更新?示例:

some function(){...}

db.test.update({"abilities.bar":"beagle","abilities.foo":"red"}
{ $set: { "abilities[x].LOE" : .99 } }
)

最佳答案

使用$elemMatch如下:

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

关于javascript - 更新键值,其中不同的键等于某个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31273590/

相关文章:

javascript - 通过 Mongoose 在 mongodb 中保存家谱的最佳实践是什么?

javascript - 想要将所有元素包装在一个 div 中,从 <h2> 接下来直到另一个 <h2>

javascript - 如何从 Json.NET 序列化的 JSON 中恢复循环引用(例如 "$id")?

javascript - 如何使用 JavaScript 在 HTML 元素的两个 ID 之间切换?

javascript - 如何从 Node Sax 中的 XML 文件读取 CDATA

javascript - React 中太多的重新渲染

mongodb - 如何使用 Robomongo 连接到 MongoDB Atlas?

javascript通过从另一个集合中查找来更新mongodb记录多个字段

node.js - Mongoose 默认值是否应用于现有文档?

mongodb - 在 mongodb 的一次更新调用中推送到两个单独的数组