【发布时间】:2021-09-21 19:08:10
【问题描述】:
我有一个 mongoDB (4.4.8) 集合,我想根据之前的值更改某个字段的值。比如我想把所有的字符串都转成大写。
为此,我使用以下查询:
db.collection.updateMany(
{ field: { $regex: "[a-z]+"}},
{ $set: { field: { $toUpper: "$field" } } }
)
执行查询时,出现以下错误:
MongoError: 'field.$toUpper' 中的美元 ($) 前缀字段 '$toUpper' 对存储无效
如果我使用类似的操作,例如 $concat(带有数组参数)将某些内容附加到字段,也会发生同样的情况。
当我查找类似的问题时,它都使用update 并告诉我改用updateMany,或者它说它只适用于 mongoDB >= 4.2。不过,这两样东西我都有。
如果我是正确的,您可以将聚合语法(其中$toUpper)与 $set 结合使用 updateMany 查询这些较新版本的 mongoDB。
有谁知道我在这里做错了什么?
【问题讨论】:
-
如果我没记错的话,聚合阶段到
update一个是使用[ ],比如this example -
$toUpper运算符是一个聚合运算符,您在常规更新查询中使用过,您尝试使用聚合管道进行更新,只需将更新部分包装在数组括号 [] 中。
标签: mongodb