MongoDB聚合:如何提取嵌套对象数组中指定州的人口数据
解决方法与学习资源推荐
一、提取DEF州人口数据的聚合查询方案
你的数据存在字段名不一致问题(第一个文档人口字段为populated,第二个为population),用MongoDB聚合管道可以实现需求,具体命令如下:
db.collection.aggregate([ // 展开states数组,将每个州转为独立文档 { $unwind: "$country_info.states" }, // 筛选出state_name为DEF的记录 { $match: { "country_info.states.state_name": "DEF" } }, // 提取所需字段,统一人口字段名为population { $project: { _id: 0, name: 1, population: { $ifNull: ["$country_info.states.population", "$country_info.states.populated"] } } } ])
执行后会得到期望结果:
{ "name" : "NZ", "population" : 22 }
{ "name" : "Oz", "population" : 5 }
步骤说明:
$unwind:拆分嵌套的states数组,让每个州成为独立文档,方便后续筛选处理$match:精准过滤出州名为DEF的记录$project:剔除不需要的_id字段,提取国家名称,用$ifNull兼容字段名差异,优先取population,不存在则用populated
二、嵌套数组/对象操作的学习视频推荐
- MongoDB官方中文教程系列:涵盖聚合管道、嵌套数据处理等核心内容,讲解权威准确
- B站尚硅谷MongoDB教程:从基础到进阶,包含大量嵌套数据操作的实战案例,适合巩固基础
- MongoDB中文社区聚合专题视频:专门针对聚合管道的复杂场景拆解,解决嵌套数据处理的常见痛点
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

