MongoDB聚合操作:如何将文档数组转换为指定字段值的数组
MongoDB 数组字段聚合转换方案
你可以通过以下聚合管道实现需求,核心是使用$map操作符遍历嵌套数组提取指定字段:
db.collection.aggregate([ { $set: { "field2.subfield2": { $map: { input: "$field2.subfield2", as: "item", in: "$$item.name" } } } } ])
代码说明
- 这里使用
$set阶段(MongoDB 4.2及以上版本支持,低版本可以替换为$addFields,效果完全一致)直接覆盖原field2.subfield2字段,不会改动文档内的其他字段 $map是数组遍历转换操作符:input参数指定要处理的原数组路径as参数定义数组遍历过程中单个元素的别名in参数定义每个元素转换后的返回值,这里直接返回每个元素的name属性值
如果你需要将转换后的结果永久更新到原集合,可以在管道末尾追加$out阶段指定原集合名(操作前建议先备份数据):
db.collection.aggregate([ // 上述$set转换阶段 { $out: "collection" } ])
可选优化
如果需要过滤掉数组中没有name字段的无效元素,可以在$map外层嵌套$filter:
{ $set: { "field2.subfield2": { $filter: { input: { $map: { input: "$field2.subfield2", as: "item", in: "$$item.name" } }, as: "nameVal", cond: { $ne: ["$$nameVal", null] } } } } }
内容的提问来源于stack exchange,提问作者sadsun
相关产品推荐
相关产品推荐

