如何基于MongoDB中的对象数组生成按年龄聚合分数的统计表格?
MongoDB数据聚合生成指定统计表格
给定school集合的文档结构(已修正原结构语法错误):
{ "classes": [ { "name": "A", "students": [ { "name": "John Doe", "age": 15, "note": 9 }, { "name": "Jane Doe", "age": 17, "note": 8 }, { "name": "James Doe", "age": 15, "note": 7 } ] } ] }
我们需要按班级、学生年龄分组,统计对应年龄段的成绩总和,最终生成如下格式的统计表格:
| class | age | sumNotes
| A | 15 | 16
| A | 17 | 8
用聚合管道实现统计
执行以下MongoDB聚合查询,就能直接得到分组统计结果:
db.school.aggregate([ // 拆分classes数组,每个班级单独成为一个文档 { $unwind: "$classes" }, // 拆分每个班级下的students数组,每个学生单独成为一个文档 { $unwind: "$classes.students" }, // 按班级+年龄分组,计算成绩总和 { $group: { _id: { class: "$classes.name", age: "$classes.students.age" }, sumNotes: { $sum: "$classes.students.note" } } }, // 重新整理输出字段,让结果更直观 { $project: { _id: 0, class: "$_id.class", age: "$_id.age", sumNotes: 1 } } ])
查询结果
运行上述代码后,会得到以下结构化结果:
[ { "class": "A", "age": 15, "sumNotes": 16 }, { "class": "A", "age": 17, "sumNotes": 8 } ]
生成目标表格
把上述结果中的字段对应填入表格即可。如果需要自动生成表格,可以用脚本(比如Node.js、Python)遍历聚合结果,拼接表头和行内容,输出成指定的Markdown表格格式。
内容的提问来源于stack exchange,提问作者Charles Braga
相关产品推荐
相关产品推荐

