如何在MongoDB中查询总分最高的学生姓名?
获取总分最高学生的MongoDB聚合查询方案
基础方案(仅取单个最高分学生)
在你已有的聚合管道基础上,添加$sort和$limit阶段,就能直接拿到总分最高的学生记录:
db.student.aggregate([ {$project: {"name": 1, total: {$sum: ["$scores.score"]}}}, {$sort: {total: -1}}, // 按总分降序排序,最高分排首位 {$limit: 1} // 只返回第一条记录 ])
进阶方案(获取所有并列最高分学生)
如果存在多个学生总分相同且都是最高分的情况,上面的查询只会返回其中一个。用以下方式可以拿到所有符合条件的学生:
db.student.aggregate([ {$project: {"name": 1, total: {$sum: ["$scores.score"]}}}, {$sort: {total: -1}}, // 聚合所有学生记录,同时计算出最高总分 {$group: { _id: null, allStudents: {$push: "$$ROOT"}, maxTotal: {$max: "$total"} }}, // 从所有学生中筛选出总分等于最高总分的记录 {$project: { topStudents: {$filter: { input: "$allStudents", cond: {$eq: ["$$this.total", "$maxTotal"]} }} }} ])
内容的提问来源于stack exchange,提问作者Pranay kumar
相关产品推荐
相关产品推荐

