MongoDB如何从嵌套对象提取指定字段并调整输出结构?
解决方案
要将嵌套在obj_modalidadeoperacao中的cod_modalidadeoperacao字段提升为顶级字段,仅靠find的基础投影无法实现,需要改用聚合框架的$project阶段重新构造输出文档结构。
修改后的查询语句
db.getCollection("c_usina").aggregate([ { $project: { _id: 0, // 可选:若不需要返回默认的_id字段则添加 id_bdt: 1, nom_curto: 1, cod_modalidadeoperacao: "$obj_modalidadeoperacao.cod_modalidadeoperacao" } } ])
原理说明
- 基础的
find投影仅能选择或排除字段,无法改变字段的层级结构,因此嵌套字段会保留在原对象中。 - 聚合的
$project阶段支持通过字段路径($obj_modalidadeoperacao.cod_modalidadeoperacao)引用嵌套字段,并将其映射为新的顶级字段,完全匹配你期望的输出结构。
可选简化(MongoDB 4.4+)
如果你的MongoDB版本是4.4及以上,也可以在find中直接使用聚合表达式实现:
db.getCollection("c_usina").find( {}, { _id: 0, id_bdt: 1, nom_curto: 1, cod_modalidadeoperacao: { $first: "$obj_modalidadeoperacao.cod_modalidadeoperacao" } } )
内容的提问来源于stack exchange,提问作者Bernard Kusel
相关产品推荐
相关产品推荐

