如何用MongoDB聚合反转对象关系:按语言分组关联国家
按语言分组的MongoDB聚合实现
完全可以通过MongoDB的聚合管道实现这个需求,核心用到$unwind和$group两个阶段:
聚合查询代码
db.countries.aggregate([ // 将每个国家的语言数组拆分为单独文档 { $unwind: "$languages" }, // 按语言分组,收集对应的国家名称数组 { $group: { _id: "$languages", countries: { $push: "$name" } } }, // 调整输出字段命名,匹配预期格式 { $project: { _id: 0, language: "$_id", countries: 1 } } ])
代码说明
$unwind:把每个国家的languages数组拆分成多条独立文档,比如瑞士(CH)会被拆成4条分别对应de、fr、it、rm的文档。$group:以语言为分组依据,用$push将同语言的国家名称收集到countries数组中。$project:将默认的_id字段重命名为language并隐藏原_id,让输出结构完全匹配你想要的格式。
执行结果
运行上述聚合后,会得到如下结果:
[ { language: "de", countries: ["CH","DE","AT"] }, { language: "fr", countries: ["CH","FR"] }, { language: "it", countries: ["CH"] }, { language: "rm", countries: ["CH"] } ]
内容的提问来源于stack exchange,提问作者wivku
相关产品推荐
相关产品推荐

