Mongo更新查询

时间:2016-11-23 18:38:10

标签: mongodb

我需要mongo db update query的帮助:

对于此数据:

{
"services" : [ 
        {
             "type" : "Financial Transaction",
        }],
 "outStandingAmount" : 0
}

此查询工作正常。

db.getCollection(&#39; user_informations&#39;)。updateMany({&#34; outStandingAmount&#34;:},{$ set:{&#34; outStandingAmount&#34;:5000}})< / p>

但是当我尝试更新时,我收到了错误。

db.getCollection('user_informations').updateMany({"services.type":"Financial Transaction"},{$set: {"services.type":"Financial Trans"}})

2 个答案:

答案 0 :(得分:2)

db.collection.find().pretty()

{"_id" : ObjectId("5836b428d7e99005c2585b08"), "services" : [{"type" : "Financial Transaction"}],"outStandingAmount" : 0}
{"_id" : ObjectId("5836c5a9d7e99005c2585b09"), "services" : [{"type" : "Financial Transaction"}], "outStandingAmount" : 2000}

以下查询将对匹配的记录进行更新。

db.collection.updateMany({"services.type":"Financial Transaction"}, {$set:{
"services":[{"type":"Financial Trans"}]}});

因为我们的集合中有两个匹配的记录 以上updateMany查询的结果是

{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }

然而,如果我们使用

db.getCollection('user_informations').updateMany({"services.type":"Financial Transaction"},{$set: {"services.type":"Financial Trans"}})

我们会收到错误消息

    "errmsg" : "cannot use the part (services of services.type) to traverse the element ({services: [ { type: \"Financial Transaction\" } ]})"

当涉及阵列时,然后&#39;。&#39;用于遍历数组元素,甚至我们可以使用&#39;来遍历嵌套数组。但是为了修改数组,我们有一组运算符,请参阅https://docs.mongodb.com/v3.2/reference/operator/update-array/

也&#39;。&#39;在我们使用位置运算符$。

时用于更新查询

答案 1 :(得分:0)

<击>&GT;找到文档时需要使用$运算符。

db.collection.updateMany(
   {"services.$.type":"Financial Transaction"},
   {$set: {"services.type":"Financial Trans"}}
 )
     

更新您的代码并将services.type替换为services.$.type   过滤器部分。

忽略我之前的查询

这样做

db.collection.find().forEach( function(doc) {
    db.collection.update({"services.type":"Financial Transaction"},
                         {$set:{"services.$.type":"Financial Trans"}});
})