聚合aggregate
聚合(aggregate) 是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage) 组成的管道,可以对每个阶段的
管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。
db.集合名称.aggregate({管道:{表达式}})
常用管道
MongoDB中的表达式
聚合之group:
· 将集合中的文档分组,可用于统计结果
· _id表示分组的依据,使用某个字段的格式为'$字段'
例: 统计男生、女生的总人数
_id : 必须写,名字不能改,是按照什么字段进行分组
counter: 统计的结果,名字 不一定是counter,可以随意指定
后面想要显示分组后的其他字段: (使用了聚合函数)
例如: 统计男生、女生的总人数,并且还有男女生的平均年龄
直接给counter后面加上 $avg:"$age"}
_id : 值为null时, 将集合中所有文档分为一组(即统计整个文档)
$group的注意点
1. $group 对应的字典中有几个键,结果中就有几个键
2. 分组依据需要放到_id 后面
3. 取不同的字段的值需要使用$
聚合之$project
· 修改输入文档的结构,如 重命名、增加、删除字段、创建计算结果
即修改输入输出的结果
指定字段 :0 结果就不显示这个字段 例如:_id:0 即结果不显示_id这个字段
指定字段为:1 就显示这个字段 和原来的是一样的
_id重命名: {$project:{_id:0,new_name:$_id}} # 就把_id的名称改变为new_name
即 {$project:{新的字段名:$旧字段名}}
聚合之$match
· 用于过滤数据,只输出符合条件的文档
· 使用MongoDB的标准查询操作
· 和find()区别: match是管道命令,能将结果交给后一个管道,但是find()不可以例子: 查询年龄大于20岁或者,家在"蒙古"或"大理"的学生
输出的结果格式为; 字段类别,以及统计的结果
代码解析: {$match} : 用来查询符合条件的数据,然后把结果给下一个管道
{$group} : 接受上个管道的数据,统计执行字段名的个数, 然后把结果给下一个管道
{$project}: 接受上个管道的数据,按照指定的结果格式输出,
例题: 有如下图的一个集合country_sub,统计出每个country / province 下的useid的数量(同一个userid只统计一次)
去重: db.country_sub.aggregate({$group:{_id:{country:"country",province:"$province",useid:"$useid"}}})
按照 country 和province,进行分组之后,每个usedi的个数
按照 country 和province,进行分组之后,每个usedi的个数 ( 进行格式化输出 )
注意:取字典嵌套的字典中的值的时候用(例如:_id.country) 直接点的方法
能够同时按照多个键进行分组
mongodb 查询分组去重 mongodb分组查询语法
转载文章标签 mongodb 查询分组去重 MongoDB的聚合 MongoDB的高级查询 字段 数据 文章分类 MongoDB 数据库

-
MongoDB 分组, 去重(转)
文档结构如下:?123456789SpcodeSpnameConsignidConsnameRegionRegionnam
mapreduce mongodb 字段 结果集 大数据量