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
        }
    }
])