MongoDB如何将数组内对象的字符串字段转为数组并保留原有值
问题原因
你当前使用的写法中,$methods.tool会直接提取整个methods数组内所有tool字段的值,拼接为一个新数组,你将这个新数组再次包裹为数组后赋值给methods.tool,就会产生额外的嵌套层级,不符合预期。
正确修改命令
你可以使用$map操作符遍历methods数组的每一项,单独对每个元素的tool字段做类型转换,同时保留元素内其他字段不变:
db.testing.update( {}, [ { $set: { methods: { $map: { input: "$methods", in: { $mergeObjects: [ "$$this", { tool: ["$$this.tool"] } ] } } } } } ], { multi: true } )
命令逻辑说明
$map遍历methods数组的每一个元素,遍历过程中当前元素用$$this指代$mergeObjects会保留原元素的所有其他字段不变,仅将tool字段的原有字符串值包裹为单元素数组- 参数
multi: true保证集合内所有符合匹配条件的文档都会被更新
内容的提问来源于stack exchange,提问作者niqo
相关产品推荐
相关产品推荐

