MongoDB查询student_id为5的最高考试分数的结果排序问题
解决方案
直接使用以下聚合查询即可得到你需要的结果:
var pipeline = [ { $match: { student_id: 5 } }, { $unwind: "$scores" }, { $match: { "scores.type": "exam" } }, { $sort: { "scores.score": -1 } }, { $limit: 1 }, { $project: { _id: 0, student_id: 1, class_id: 1, scores: 1 } } ] var results = db.grades.aggregate(pipeline); results.forEach(printjson)
逻辑说明
- 第一步
$match先过滤出student_id为5的所有文档,缩小查询范围 - 第二步
$unwind将嵌套的scores数组拆分,每个分数项对应一条独立的中间文档 - 第三步新增的
$match专门过滤出类型为exam的分数项,直接排除quiz、homework两类数据,不会出现其他类型分数混入排序的问题 - 第四步对过滤后的考试分数做降序排序,分数最高的记录会排在第一位
- 第五步用
$limit仅保留排序后的第一条记录,就是你需要的最高考试分数条目 - 最后一步
$project调整输出字段,隐藏系统默认的_id字段,输出格式和你期望的完全一致
内容的提问来源于stack exchange,提问作者Sloxy
相关产品推荐
相关产品推荐

