MongoDB updateMany查询无法正确映射已有字段值至新对象
解决MongoDB字段迁移至嵌套对象的问题
你的问题出在普通$set操作无法解析嵌套对象内的字段引用($字段名),直接写会被当作字符串字面量。要实现将现有字段值复制到新的questionAnswers对象中,需要使用聚合管道式的更新语法(MongoDB 4.2+支持)。
正确的查询语句
db.getCollection("users").updateMany( { _id: ObjectId('65d8fd25618ef79985233636') }, [ { $set: { questionAnswers: { hobbies: "$hobbies", islandItems: "$islandItems", superPower: "$superPower" } } } ] )
关键说明
- 将更新操作的第二个参数从普通对象改为数组,MongoDB会将其识别为聚合管道,此时
$hobbies这类语法会被解析为对文档现有字段的引用,而非字符串。 - 执行后,
questionAnswers对象内的字段会正确复制原字段的数值,而不是保留带$的字符串。 - 确保你的MongoDB版本不低于4.2,该版本才引入了聚合管道式更新的支持。
内容的提问来源于stack exchange,提问作者Will 40
相关产品推荐
相关产品推荐

