聚合aggregate

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

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

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

常用管道

MongoDB中的表达式

  聚合之group:

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

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

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

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

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

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

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

直接给counter后面加上    avg_age:  {$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数据库(5.mongodb的聚合操作以及mongodb的高级查询2)相关推荐

  1. mongodb数据库安装和启动及操作笔记

    MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB 文档类似于 JSON 对象.字段值可以包含其他文档,下面linux系统安装方法如下: debi ...

  2. nodejs对mongodb数据库的增删改查操作(转载)

    首先要确保mongodb的正确安装,安装参照:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-debian-or-ubuntu-l ...

  3. mongodb数据库淘汰_红帽彻底不跟MongoDB玩了,只认PostgreSQL

    原标题:红帽彻底不跟MongoDB玩了,只认PostgreSQL 用来管理Red Hat Enterprise Linux部署的系统管理解决方案Red Hat Satellite,将变更其底层数据库结 ...

  4. php mongodb的lookup,通过Aggregate $lookup操作 进行MongoDB的联表查询

    Aggregate的 $lookup 和 $match ,可用于MangoDB的联表 直接上代码 两个表介绍 services表 number: 服务号码 flow: 流程名称 flows表 name ...

  5. SpringBoot 操作 ES 进行各种高级查询

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...

  6. Spring Boot操作ES进行各种高级查询(值得收藏)

    作者 | 后青春期的Keats 来源 | http://cnblogs.com/keatsCoder/p/11341835.html SpringBoot整合ES 创建SpringBoot项目,导入 ...

  7. SpringBoot操作ES进行各种高级查询(值得收藏)

    来源:cnblogs.com/keatsCoder/p/11341835.html SpringBoot整合ES 创建SpringBoot项目,导入 ES 6.2.1 的 RestClient 依赖和 ...

  8. SpringBoot操作ES进行各种高级查询

    SpringBoot整合ES 创建SpringBoot项目,导入 ES 6.2.1 的 RestClient 依赖和 ES 依赖.在项目中直接引用 es-starter 的话会报容器初始化异常错误,导 ...

  9. java操作es之各种高级查询

    目录 一.springboot整合es 1.1 pom依赖 1.2 yml配置 1.3 创建索引 1.4 创建映射 1.5 写入数据 二.Java API操作ES 2.1 查询全部 2.2 精准匹配 ...

最新文章

  1. COM 组件设计与应用(六)——用 ATL 写第一个组件(vc.net)
  2. 基于Faster RCNN的医学图像检测(肺结节检测)
  3. 外文翻译 《How we decide》赛场上的四分卫 第三节
  4. mysql把sql文件导入到数据库
  5. 【毕业求职季】-听说你想去大厂看学妹,带你看看腾讯微信产品岗面经(已offer)
  6. weblogic.rjvm.PeerGoneException
  7. java oracle 字符_Oracle转义字符
  8. Linux(1)-实用终端命令
  9. python win32ui_Python创建普通菜单示例【基于win32ui模块】
  10. Linux 多线程可重入函数
  11. 基于JAVA+SpringMVC+Mybatis+MYSQL的网上玩具销售系统
  12. 问答| 为何会采用倒车入库(侧方位停车)方式?
  13. 從零開始學 ReactJS:最完整的 React 生態系入門教程
  14. 各 Delphi 历史版本下载合集
  15. 台达plc控制伺服电机编程实例_plc控制伺服电机程序实例讲解!成功都是可以复制的!...
  16. 单片机c语言fft函数,单片机ADC采样FFT计算试验
  17. TM1620芯片使用
  18. 第23集丨人生的智慧:练就一颗从容自在的心
  19. http转https后资源加载不显示
  20. 从Thompson Sampling到增强学习, 再谈多臂老虎机问题

热门文章

  1. 游戏里的角色都什么格式图片_二十年前是怎样开发游戏的?
  2. python绘制饼图双层_Python入门进阶:Python绘制饼图到Microsoft Excel
  3. python统计字符出现的次数最多的字符_Python统计字符串中出现次数最多的人名
  4. Visual C++——《可视化编程技术》实验报告——资源的应用—反弹的球
  5. Windows——右键菜单显示“管理员取得所有权”选项
  6. PHP——PHP读取MySQL数据库中文乱码解决方案
  7. Linux——主流发行版本
  8. HTML、HTML5、XML、XHMTL区别
  9. Power Transmission
  10. Dandan's lunch