如何编写MongoDB更新查询将数组内字段转为小写
正确的MongoDB更新查询语句
要将集合中所有文档的cities.name转为小写,需要使用聚合管道式更新(MongoDB 4.2及以上版本支持),通过$map遍历数组并转换每个元素的name字段:
db.states.updateMany( {}, [ { $set: { cities: { $map: { input: "$cities", as: "city", in: { cityid: "$$city.cityid", name: { $toLower: "$$city.name" } } } } } } ] )
原有写法报错原因
你之前的写法错误在于:在$set的字段值中直接使用{ $toLower: "cities.$[].name" }是不合法的——"cities.$[].name"被当作字符串字面量处理,而非字段引用,同时这种方式无法正确遍历数组并引用每个元素的原有值。
聚合管道式更新允许你使用聚合表达式(如$map、$toLower)基于原有字段值生成新值,通过$引用根文档字段,$$引用管道变量(比如$map中as定义的变量)。
内容的提问来源于stack exchange,提问作者pheobas
相关产品推荐
相关产品推荐

