如何在MongoDB中按指定字段分组并返回含子列表的记录集
MongoDB按指定字段分组并将子记录整理为列表
要实现你需要的按category_id和category_name分组,把对应子类别记录整理为列表的需求,你可以使用MongoDB的聚合管道,结合$group和$project操作符来完成。
完整聚合查询代码
db.yourCollectionName.aggregate([ // 第一步:按类别字段分组,收集子类别列表 { $group: { _id: { category_id: "$category_id", category_name: "$category_name" }, subcategory_list: { $push: { _id: "$_id", subcategory_name: "$subcategory_name" } } } }, // 第二步:调整输出结构,让类别字段成为顶级属性 { $project: { _id: 0, category_id: "$_id.category_id", category_name: "$_id.category_name", subcategory_list: 1 } } ])
代码解释
$group阶段:
- 我们把
category_id和category_name组合作为分组的_id键,确保同一类别的记录会被分到一组。 - 使用
$push操作符,将每个子类别文档中的_id和subcategory_name字段打包成对象,添加到subcategory_list数组中,这样就把同一类别的所有子类别都收集起来了。
- 我们把
$project阶段:
- 这里是为了调整输出的结构,把
_id中存储的category_id和category_name提取为顶级字段,同时移除默认的_id字段,让最终输出和你期望的格式完全一致。
- 这里是为了调整输出的结构,把
注意:记得把代码中的
yourCollectionName替换成你实际使用的集合名称哦。
内容的提问来源于stack exchange,提问作者Amit Patil
相关产品推荐
相关产品推荐

