美文网首页
2018-08-10mongodb聚合+group管道

2018-08-10mongodb聚合+group管道

作者: 菩灵 | 来源:发表于2018-08-10 13:29 被阅读6次

    总论:高级操作

    • 讲解关于mongodb的高级操作,包括聚合、主从复制、分片、备份与恢复、MR
    • 完成python与mongodb的交互

    一、聚合 aggregate

    • 聚合(aggregate)主要用于计算数据,类似sql中的sum()、avg()
    • 需要知道:在MongoliaDB中做统计,用aggregate函数
    • 语法
    db.集合名称.aggregate([{管道:{表达式}}])
    里面是数组,所以用[],把第一个json的结果储存起来,作为第二个json的输入。
    

    管道

    • 管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的输入,把上一次的输出,作为下一次的输入
    ps ajx | grep mongo
    
    
    • 在mongodb中,管道具有同样的作用,文档处理完毕后,通过管道进行下一次处理
    • 常用管道
      • $group:将集合中的文档分组,可用于统计结果
      • $match:过滤数据,只输出符合条件的文档
      • $project:修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
      • $sort:将输入文档排序后输出
      • $limit:限制聚合管道返回的文档数
      • $skip:跳过指定数量的文档,并返回余下的文档
      • $unwind:将数组类型的字段进行拆分

    表达式

    • 处理输入文档并输出
    • 语法
    表达式:'$列名'
    
    
    • 常用表达式
      • sum:计算总和,sum:1同count表示计数
      • $avg:计算平均值
      • $min:获取最小值
      • $max:获取最大值
      • $push:在结果文档中插入值到一个数组中
      • $first:根据资源文档的排序获取第一个文档数据
      • $last:根据资源文档的排序获取最后一个文档数据

    1、$group管道

    • 将集合中的文档分组,可用于统计结果
    • _id表示分组的依据,使用某个字段的格式为'$字段'
    • counter为结果的名字,这个属性冒号后面接需要做的操作
    • 例1:统计男生、女生的总人数
    db.stu.aggregate([
        {$group:
            {
                _id:'$gender',
                counter:{$sum:1}
            }
        }
    ])
    
    
    未加$并未达到分组效果 不要忘记加$,$sum:1表示见到一行加一个,统计文档条数的功能 sum后面也可以$字段,则是把字段求和 $push,把按照gender字段分类好的数据放到一个数组里面,把之前MySQL中不可见的数据变成可见

    Group by null

    • 将集合中所有文档分为一组
    • 例2:求学生总人数、平均年龄
    db.stu.aggregate([
        {$group:
            {
                _id:null,
                counter:{$sum:1},
                avgAge:{$avg:'$age'}
            }
        }
    ])
    
    
    把集合中所有文档分一组?

    透视数据push函数

    • 例3:统计学生性别及学生姓名
    db.stu.aggregate([
        {$group:
            {
                _id:'$gender',
                name:{$push:'$name'}
            }
        }
    ])
    
    
    • 使用$$ROOT可以将文档内容加入到结果集的数组中,代码如下
    db.stu.aggregate([
        {$group:
            {
                _id:'$gender',
                name:{$push:'$$ROOT'}
            }
        }
    ])
    
    $$ROOT把这个文档分组后放到一起展示出来

    相关文章

      网友评论

          本文标题:2018-08-10mongodb聚合+group管道

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