MongoDB分组排序查询:按国家分组按州数排序组内按病例排序
字段映射说明
先确认你MongoDB集合的字段和示例数据对应关系,以下查询默认使用字段名:
- 国家:
country - 州:
state - 人口密度(人/km²):
ppd - 病例数(百万):
cases
如果你的实际字段名不同,替换查询里对应的字段名即可。
优化后的MongoDB聚合查询语句
db.你的集合名.aggregate([ // 第一步:先按病例数降序排序,后续分组时直接存入数组即可保证组内顺序,性能更高 { $sort: { cases: -1 } }, // 第二步:按国家分组,统计州数量、组装州明细数组 { $group: { _id: "$country", num_states: { $sum: 1 }, states: { $push: { State: "$state", Cases: "$cases", PPD: "$ppd" } } } }, // 第三步:按州的数量降序排序国家分组 { $sort: { num_states: -1 } }, // 第四步:格式化输出字段,组装成要求的结构 { $project: { _id: 0, country: "$_id", num_states: 1, states: 1 } }, // 第五步:把所有结果包装到results数组里,符合最终输出格式 { $group: { _id: null, results: { $push: "$$ROOT" } } }, { $project: { _id: 0 } } ])
优化点说明
- 提前排序:在分组前先对全量数据按
cases降序排序,避免分组后再通过$unwind拆分数组、排序、再$group组装的冗余操作,数据量越大性能优势越明显 - 字段投影精简:提前过滤不需要的字段,减少数据传输和处理开销
内容的提问来源于stack exchange,提问作者Vaibhav Thakkar
相关产品推荐
相关产品推荐

