7. mongodb 聚合查询

创建时间:2023-02-07 11:11
长度:1202
浏览:0
评论:0

准备数据

use test4;
db.c1.insert({ _id: 1, name: "a", sex: 1, age: 1 });
db.c1.insert({ _id: 2, name: "a", sex: 1, age: 2 });
db.c1.insert({ _id: 3, name: "b", sex: 2, age: 3 });
db.c1.insert({ _id: 4, name: "c", sex: 2, age: 4 });
db.c1.insert({ _id: 5, name: "d", sex: 2, age: 5 });

db.c1.find();


语法

db.集合名.aggregate([
    { 
        管道:{ 表达式 }
    },
    ...
])

例子: 查询男生、女生的总年龄
db.c1.aggregate([
    {
        $group: {
            # _id是固定格式, $sex是字段名
            _id: "$sex", 
            # $result是统计结果的列名,$sum是表达式(参照下面), $age是统计字段
            result: { $sum: "$age"}, 
        }
    }
])


常用管道

管道名作用
$group将集合中的文档分组,用于统计结果
$match过滤数据,只要输出符合条件的数据
$sort聚合数据进一步排序
$skip跳过指定数据量
$limit查询集合数据返回的数量量


常用表达式

表达式名作用
$sum总和.
$sum: 1 和count一样,表示统计
$avg平均
$min最小值
$max最大值


例子1: 统计男生、女生的总人数

db.c1.aggregate([
    {
        $group: {
            _id: "$sex",
            result: { $sum: 1} 
        }
    }
])


例子2: 求学生总数和平均年龄

db.c1.aggregate([
    {
        $group: {
            _id: null,
            total_num: { $sum: 1},
            total_age: { $avg: "$age"},
        }
    }
])


例子3: 查询男生、女生人数,按人数升序

db.c1.aggregate([
    {
        $group: {
            _id: "$sex",
            result: { $sum: 1 },
        },
    },
    {
        $sort: {
            result: 1
        }
    }
])


评论(共0条)