mongo聚合操作练习题

文章目录


练习数据

// 插入数据
db.students.insertMany([
    {
        "_id": "1001",
        "age": "19",
        "credits": "52",
        "major": "计算机应用技术",
        "name": "程明",
        "score": "92",
        "sex": "男"
    },
    {
        "_id": "1002",
        "age": "18",
        "credits": "51",
        "major": "移动应用开发",
        "name": "刘洋",
        "score": "88",
        "sex": "女"
    },
    {
        "_id": "1003",
        "age": "20",
        "credits": "48",
        "major": "计算机应用技术",
        "name": "张静",
        "score": "96",
        "sex": "女"
    },
    {
        "_id": "1004",
        "age": "20",
        "credits": "53",
        "major": "软件技术",
        "name": "陈好",
        "score": "97",
        "sex": "女"
    },
    {
        "_id": "1005",
        "age": "20",
        "credits": "54",
        "major": "计算机应用技术",
        "name": "施行",
        "score": "60",
        "sex": "男"
    },
    {
        "_id": "1006",
        "age": "18",
        "credits": "50",
        "major": "软件技术",
        "name": "刘文平",
        "score": "86",
        "sex": "女"
    },
    {
        "_id": "1007",
        "age": "20",
        "credits": "55",
        "major": "计算机应用技术",
        "name": "李德胜",
        "score": "95",
        "sex": "男"
    },
    {
        "_id": "1008",
        "age": "18",
        "credits": "50",
        "major": "移动应用开发",
        "name": "苏锦州",
        "score": "70",
        "sex": "男"
    },
    {
        "_id": "1009",
        "age": "20",
        "credits": "53",
        "major": "计算机应用技术",
        "name": "张文杰",
        "score": "40",
        "sex": "女"
    },
    {
        "_id": "1010",
        "age": "18",
        "credits": "47",
        "major": "软件技术",
        "name": "王林",
        "score": "87",
        "sex": "男"
    },
    {
        "_id": "1011",
        "age": "19",
        "credits": "46",
        "major": "计算机应用技术",
        "name": "程梦凡",
        "score": "66",
        "sex": "男"
    },
    {
        "_id": "1012",
        "age": "19",
        "credits": "45",
        "major": "软件技术",
        "name": "陈玉婷",
        "score": "82",
        "sex": "女"
    },
    {
        "_id": "1013",
        "age": "19",
        "credits": "41",
        "major": "计算机应用技术",
        "name": "张春华",
        "score": "64",
        "sex": "男"
    },
    {
        "_id": "1014",
        "age": "18",
        "credits": "49",
        "major": "移动应用开发",
        "name": "苏秦",
        "score": "77",
        "sex": "女"
    },
    {
        "_id": "1015",
        "age": "21",
        "credits": "42",
        "major": "软件技术",
        "name": "李雨桐",
        "score": "81",
        "sex": "女"
    }
])

一.练习题

(1)查询软件技术和移动应用开发专业学生的平均年龄。

db.students.aggregate([{
    $match:{
        "major": {$in:["软件技术","移动应用开发"]}
    },
},{
    $group:{
        _id:"$major",
        "年龄":{$avg:{$toInt:"$age"}},
    }
}])

在这里插入图片描述

(2)查看计算机应用技术专业的学生,并按照学分进行降序的排序。

db.students.aggregate([{
    $match: {
   
   "major": "计算机应用技术"},
}, {
    $sort: {
   
   "score": -1}
}])

在这里插入图片描述
(3)查看计算机应用技术专业男生和女生的总学分,最高学分和最低学分。

db.students.aggregate([{
    $match: {
   
   "major": "计算机应用技术"},
}, {
    $group: {
        _id: "$sex",
        "学科": {$first: "$major"},
        "总学分": {$sum: {$toInt: "$score"}},
        "最高学分": {$max:{$toInt: "$score"}},
        "最低学分": {$min: {$toInt: "$score"}},
    }
}])

在这里插入图片描述
(4)查询各个专业学生的平均成绩,第一个人的成绩和最后一个人的成绩。

db.students.aggregate([ {
    $group: {
        _id: "$major",
        "平均成绩": {$avg: {$toInt: "$score"}},
        "每科第一人的成绩": {$first: {$toInt: "$score"}},
        "每科最后一人的成绩": {$last: {$toInt: "$score"}},
    }
}])

在这里插入图片描述
(5)统计各个专业的学生人数并按人数从多到少排序

db.students.aggregate([{
    $group: {
        _id: "$major",
        "人数": {$sum: 1}
    }
},{$sort: {
   
   "人数": -1}}])

在这里插入图片描述
(6)显示成绩排名第4和第5的学生的姓名,专业和成绩。
此题简单理解是这样的.但明显不符合逻辑.哪有不同专业pk成绩的.额各个专业专门统计太复杂

db.students.find().sort({
   
   "score": -1}).skip(3).limit(2)

在这里插入图片描述

(7)统计不同性别的学生姓名。

db.students.aggregate([{
    $group: {
        _id: "$sex",
        "姓名": {$push: "$name"},
    }
}])

在这里插入图片描述
(8)查询年龄大于19的男生、女生人数。

/*法一*/
db.students.aggregate([
    {
        $match: {
            $expr: {
                "age":
                    {$gt: [{$toInt: "$age"}, 19]}
            }
        }
    }
    , {
        $group: {
            _id: "$sex",
            "年龄大于19的人数": {$sum: 1}
        }
    }])
/*法二*/
db.students.aggregate([
    {
        $group: {
            _id: "$sex",
            "年龄大于19的人数": {
                $sum: {
                    $cond: [
                        {$gt: ["$age", 19]},
                        1,
                        0
                    ]
                }
            }
        }
    }])

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_50913327/article/details/129629141