聚合aggregate

     聚合(aggregate) 是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage) 组成的管道,可以对每个阶段的

 管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。

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

常用管道

     

mongodb 查询分组去重 mongodb分组查询语法_字段

MongoDB中的表达式

    

mongodb 查询分组去重 mongodb分组查询语法_MongoDB的聚合_02

  聚合之group:

   ·  将集合中的文档分组,可用于统计结果

  ·  _id表示分组的依据,使用某个字段的格式为'$字段'

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

    

mongodb 查询分组去重 mongodb分组查询语法_MongoDB的聚合_03

_id : 必须写,名字不能改,是按照什么字段进行分组 

       counter:  统计的结果,名字 不一定是counter,可以随意指定

       后面想要显示分组后的其他字段:  (使用了聚合函数)

       例如:  统计男生、女生的总人数,并且还有男女生的平均年龄

           直接给counter后面加上   $avg:"$age"}

  _id : 值为null时,  将集合中所有文档分为一组(即统计整个文档)

     

mongodb 查询分组去重 mongodb分组查询语法_MongoDB的高级查询_04

$group的注意点

   1. $group 对应的字典中有几个键,结果中就有几个键

    2. 分组依据需要放到_id 后面

   3. 取不同的字段的值需要使用$

 聚合之$project

  · 修改输入文档的结构,如 重命名、增加、删除字段、创建计算结果  

    即修改输入输出的结果 

mongodb 查询分组去重 mongodb分组查询语法_数据_05

  指定字段 :0 结果就不显示这个字段       例如:_id:0  即结果不显示_id这个字段

   指定字段为:1    就显示这个字段   和原来的是一样的

   _id重命名:    {$project:{_id:0,new_name:$_id}}    # 就把_id的名称改变为new_name

           即    {$project:{新的字段名:$旧字段名}}

 聚合之$match

  · 用于过滤数据,只输出符合条件的文档

·   使用MongoDB的标准查询操作
·   和find()区别:   match是管道命令,能将结果交给后一个管道,但是find()不可以

  例子: 查询年龄大于20岁或者,家在"蒙古"或"大理"的学生

              输出的结果格式为;      字段类别,以及统计的结果

     

mongodb 查询分组去重 mongodb分组查询语法_mongodb 查询分组去重_06

     代码解析:  {$match}   : 用来查询符合条件的数据,然后把结果给下一个管道

                          {$group} :  接受上个管道的数据,统计执行字段名的个数, 然后把结果给下一个管道

                         {$project}:   接受上个管道的数据,按照指定的结果格式输出, 

 例题:  有如下图的一个集合country_sub,统计出每个country / province 下的useid的数量(同一个userid只统计一次)


mongodb 查询分组去重 mongodb分组查询语法_MongoDB的高级查询_07

    去重db.country_sub.aggregate({$group:{_id:{country:"country",province:"$province",useid:"$useid"}}})

           

mongodb 查询分组去重 mongodb分组查询语法_mongodb 查询分组去重_08

  按照 country 和province,进行分组之后,每个usedi的个数

mongodb 查询分组去重 mongodb分组查询语法_mongodb 查询分组去重_09

  按照 country 和province,进行分组之后,每个usedi的个数  (  进行格式化输出  )

 注意:取字典嵌套的字典中的值的时候用(例如:_id.country) 直接点的方法

           能够同时按照多个键进行分组

mongodb 查询分组去重 mongodb分组查询语法_MongoDB的聚合_10