MongoDB如何给嵌套数组元素新增取自同元素其他字段的字段
解决方案
你之前写法的核心问题:直接对数组字段做嵌套赋值时,$myObjects.nmbr 会提取数组中所有元素的nmbr字段组成新数组,所以每个元素的id都被赋值为了整个nmbr数组,而非对应元素本身的nmbr值。
你可以使用$map遍历myObjects数组的每一个元素,为单个元素新增id字段,正确聚合语句如下:
db.collection.aggregate([ { $addFields: { myObjects: { $map: { input: "$myObjects", as: "item", in: { $mergeObjects: [ "$$item", { id: "$$item.nmbr" } ] } } } } } ])
说明:
$map负责遍历myObjects数组,每个遍历到的元素临时命名为item$mergeObjects会合并原元素的所有字段和新增的id字段,不会丢失原有字段
如果你需要直接修改集合内的原始数据(而非仅查询得到转换后的结果),MongoDB 4.2及以上版本可以直接使用带聚合管道的更新语句:
db.collection.updateMany( {}, // 匹配条件,空代表匹配集合内所有文档 [ { $set: { myObjects: { $map: { input: "$myObjects", as: "item", in: { $mergeObjects: [ "$$item", { id: "$$item.nmbr" } ] } } } } } ] )
内容的提问来源于stack exchange,提问作者MateoB27
相关产品推荐
相关产品推荐

