美文网首页
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