Mongo Shell中引用嵌套字段添加新字段失败,求解决
MongoDB更新嵌套字段到根字段问题解决
我需要给businesslistings集合的所有文档添加一个根级别address字段,将嵌套在attributes[0].basicDetails[1].valueString下的地址值赋值给它。尝试执行以下更新语句后,address字段被设置为字符串$attributes[0].basicDetails[1].valueString,而非目标字段的实际值:
错误更新语句:
db.businesslistings.updateMany({}, {$set: {"address": '$attributes[0].basicDetails[1].valueString'}})
执行结果:
address: "$attributes[0].basicDetails[1].valueString"
正确解决方案
MongoDB 4.2及以上版本支持通过聚合管道实现引用现有字段值的更新操作,只需将$set操作包裹在数组中,就能让MongoDB解析字段路径引用:
db.businesslistings.updateMany({}, [ {$set: { "address": "$attributes.0.basicDetails.1.valueString" }} ])
关键说明
- 聚合管道语法(更新操作放在数组内)是让MongoDB识别字段引用的核心,直接使用
$set对象会被当作普通字符串赋值 - 数组索引可以用
.索引的形式书写(也支持[索引]写法,两种均有效) - 请确认你的MongoDB版本≥4.2,低版本不支持该特性
内容的提问来源于stack exchange,提问作者Noob_Mern_Dev
相关产品推荐
相关产品推荐

