MST

星途 面试题库

面试题:MongoDB聚合管道之基础操作运用

假设有一个集合名为students,其中每个文档包含学生的姓名(name)、年龄(age)和成绩(score)字段。请使用聚合管道实现以下功能:筛选出年龄大于18岁的学生,并计算这些学生的平均成绩,最终以平均成绩降序排列返回结果。
34.5万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

在MongoDB中,可以使用以下聚合管道来实现该功能:

[
    {
        "$match": {
            "age": {
                "$gt": 18
            }
        }
    },
    {
        "$group": {
            "_id": null,
            "averageScore": {
                "$avg": "$score"
            }
        }
    },
    {
        "$sort": {
            "averageScore": -1
        }
    }
]
  1. $match阶段:使用$match操作符筛选出年龄大于18岁的学生文档。
  2. $group阶段:使用$group操作符对筛选后的文档进行分组,这里_id设置为null表示将所有文档分到一个组。在组内使用$avg操作符计算score字段的平均值,并将结果命名为averageScore
  3. $sort阶段:使用$sort操作符按照averageScore字段进行降序排列。

如果是在其他数据库(如MySQL)中,假设表结构如下:

CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    age INT,
    score DECIMAL(5,2)
);

可以使用以下SQL查询实现:

SELECT AVG(score) AS averageScore
FROM students
WHERE age > 18
ORDER BY averageScore DESC;
  1. WHERE子句:筛选出年龄大于18岁的学生记录。
  2. AVG函数:计算符合条件学生的平均成绩。
  3. ORDER BY子句:按照平均成绩降序排列。