MongoDB使用updateMany将数字字段转字符串新增字段失败求助
解决MongoDB更新时引用现有字段并转换类型的问题
你的问题出在没有使用聚合管道语法执行更新,导致聚合操作符或字段引用未被正确解析:
- 第一种写法直接在
$set里用$toString,MongoDB会把{$toString:"$snowflake"}当作普通对象存入userId字段,而非执行类型转换。 - 第二种写法的
"$snowflake"是字符串字面量,MongoDB会直接存储这个字符串,不会将其解析为对snowflake字段的引用。
MongoDB 4.2及以上版本支持用聚合管道作为更新语句的第二个参数,这样就能在更新中使用聚合操作符引用现有字段并处理数据。针对你的需求,正确的写法如下:
db.person.updateMany( {}, // 空对象表示匹配所有文档 [ { $set: { userId: { $toString: "$snowflake" } } } ] )
如果需要完成完整的"重命名"操作(新增userId后删除原snowflake字段),可以在聚合管道中追加$unset阶段:
db.person.updateMany( {}, [ { $set: { userId: { $toString: "$snowflake" } } }, { $unset: ["snowflake"] } // 删除原字段 ] )
内容的提问来源于stack exchange,提问作者muttley91
相关产品推荐
相关产品推荐

