一个MongoDB更新查询,用于将数组值更新为其小写值

rekjcdws  于 2023-02-03  发布在  Go
关注(0)|答案(1)|浏览(190)

我有一个Mongo州集合,其中每个州包含一系列城市:

{
   "_id":"636d1137cf1e57408486f795",
   "state":"new york",
   "cities":[
      {
         "cityid":"62bd8fa5396ba8aef4ad1041",
         "name":"Yonkers"
      },
      {
         "cityid":"62bd8fa5396ba8aef4ad1043",
         "name":"Syracuse"
      }
   ]
}

我需要一个更新查询,将集合中的每一个cities.name小写。我可以用一个文字值进行更新,例如。

db.states.updateMany(
   {},
   { $set: { "cities.$[].name" : "some_value" } }
)

......,但是我需要这个值基于现有的值,我能得到的最接近的值是这样的(但是这不起作用--FieldPath field names may not start with '$'

db.states.updateMany(
   {},
   { $set: { "cities.$[].name" : { $toLower:  "cities.$[].name"} } }
)
lf5gs5x2

lf5gs5x21#

您可以将$map$mergeObjects链接起来执行更新。在更新时将其放在聚合管道中。

db.collection.update({},
[
  {
    $set: {
      cities: {
        "$map": {
          "input": "$cities",
          "as": "c",
          "in": {
            "$mergeObjects": [
              "$$c",
              {
                "name": {
                  "$toLower": "$$c.name"
                }
              }
            ]
          }
        }
      }
    }
  }
])

Mongo Playground

相关问题