美文网首页mongodb
MongoDB 轻松搞定统计 —— 聚合函数使用

MongoDB 轻松搞定统计 —— 聚合函数使用

作者: 岛上码农 | 来源:发表于2022-05-30 19:03 被阅读0次

    聚合操作处理数据记录并返回对应的计算结果。聚合操作从多个文档中获取组合值,可以对多种数据进行处理而只返回单个结果。MongoDB 提供了三种方式完成聚合:聚合管道,map-reduce 函数和单个用途的聚合方法。本篇介绍基础的统计聚合函数。

    count 计数

    在 MySQL 中我们通常使用 SELECT count(*) FROM table_name WHERE ...来获取满足某个条件的记录条数。在 MondoDB 中还提供了类似的方法。MongoDB 有如下方式:

    db.collection.count({条件});
    db.collection.find({条件}).length();
    

    以下面的数据为例:

    [
      {
        "gender" : "男",
        "name" : "Tom",
        "age": 10,
      },
      {
        "gender" : "男",
        "name" : "Jack",
        "age": 12,
      },
      {
        "gender" : "男",
        "name" : "Jim",
        "age": 15,
      },
      {
        "gender" : "男",
        "name" : "Jimmy",
        "age": 18,
      },
      {
        "name" : "Mary",
        "gender" : "女",
        "age": 10
      }
    ]
    
    

    查找男性的用户数量可以这样做:

    db.users.count({gender: '男'});
    db.users.find({gender: '男'}).length();
    

    如果要实现条件查询呢,使用条件即可,比如查询性别为男,年龄大于等于15的用户:

    db.users.count({
      $and: [
        {gender: '男'},
        {age: {$gte: 15}}
      ]
    });
    

    条件的时候和之前条件查询的用法一样,可以参考:MongoDB 条件查询和排序
    MongoDB 同样提供了分组计数的方法。比如要统计男女性别的人数,可以按如下方式进行:

    db.users.aggregate(
      [
        {
          $group: {
            _id: '$gender', 
            count:{$sum: 1}
          }
        }
      ]
     );
    

    求和

    求和通过聚合的$sum 操作符来完成,可以用来计算某一个数值列的和,例如我们要计算所有年龄之和。

    db.users.aggregate(
      [
        {
          $group: {
            _id: null,
            totalAge: {$sum: '$age'}
          }
        }
      ]
    ); 
    

    这里_id 指定为 null 是就是对全部数据进行求和(即不分组),若指定了列,则可以分组求和,比如对男性和女性分别求和。

    db.users.aggregate(
      [
        {
          $group: {
            _id: '$gender',
            totalAge: {$sum: '$age'}
          }
        }
      ]
    ); 
    

    求和也可以对多个字段进行求和,以下面的外卖订单数据为例:

    [
      {
        "goods_name" : "芹菜香干",
        "express_fee" : 3,
        "amount": 10.5,
      },
      {
        "goods_name" : "米饭",
        "express_fee" : 0,
        "amount": 3,
      },
      {
        "goods_name" : "鱼香茄子",
        "express_fee" : 2,
        "amount": 15.5,
      },
      {
        "goods_name" : "酸菜鱼",
        "express_fee" : 3,
        "amount": 48,
      },
    ]
    
    

    我们想知道算上配送费的订单总额,可以像下面那样做,如果我们加上商品名称也可以得到每个商品的销售总额。

    db.orders.aggregate(   
      [     
        {       
          $group: {        
            _id: null,       
            totalAmount: {
              $sum: {
                $sum:['$amount', '$express_fee']
              }
            }     
          }
        }   
      ] 
    );
    

    平均值

    平均值通过$avg 操作符完成,例如上面数据的计算平均客单价:

    db.orders.aggregate(   
      [     
        {       
          $group: {        
            _id: null,       
            avgAmount: {
              $avg: {
                $sum:['$amount', '$express_fee']
              }
            }     
          }
        }   
      ] 
    );
    

    总结

    本篇介绍了 MongoDB 的聚合函数的基本用法,包括计数、求和和取平均值。通过 MongoDB 提供了聚合函数可以高效地完成统计工作。

    相关文章

      网友评论

        本文标题:MongoDB 轻松搞定统计 —— 聚合函数使用

        本文链接:https://www.haomeiwen.com/subject/lbzoprtx.html