我需要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"}})
答案 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"}});
})