MongoDB数据库(5.mongodb的聚合操作以及mongodb的高级查询2)
聚合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)相关推荐
- mongodb数据库安装和启动及操作笔记
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB 文档类似于 JSON 对象.字段值可以包含其他文档,下面linux系统安装方法如下: debi ...
- nodejs对mongodb数据库的增删改查操作(转载)
首先要确保mongodb的正确安装,安装参照:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-debian-or-ubuntu-l ...
- mongodb数据库淘汰_红帽彻底不跟MongoDB玩了,只认PostgreSQL
原标题:红帽彻底不跟MongoDB玩了,只认PostgreSQL 用来管理Red Hat Enterprise Linux部署的系统管理解决方案Red Hat Satellite,将变更其底层数据库结 ...
- php mongodb的lookup,通过Aggregate $lookup操作 进行MongoDB的联表查询
Aggregate的 $lookup 和 $match ,可用于MangoDB的联表 直接上代码 两个表介绍 services表 number: 服务号码 flow: 流程名称 flows表 name ...
- SpringBoot 操作 ES 进行各种高级查询
点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...
- Spring Boot操作ES进行各种高级查询(值得收藏)
作者 | 后青春期的Keats 来源 | http://cnblogs.com/keatsCoder/p/11341835.html SpringBoot整合ES 创建SpringBoot项目,导入 ...
- SpringBoot操作ES进行各种高级查询(值得收藏)
来源:cnblogs.com/keatsCoder/p/11341835.html SpringBoot整合ES 创建SpringBoot项目,导入 ES 6.2.1 的 RestClient 依赖和 ...
- SpringBoot操作ES进行各种高级查询
SpringBoot整合ES 创建SpringBoot项目,导入 ES 6.2.1 的 RestClient 依赖和 ES 依赖.在项目中直接引用 es-starter 的话会报容器初始化异常错误,导 ...
- java操作es之各种高级查询
目录 一.springboot整合es 1.1 pom依赖 1.2 yml配置 1.3 创建索引 1.4 创建映射 1.5 写入数据 二.Java API操作ES 2.1 查询全部 2.2 精准匹配 ...
最新文章
- COM 组件设计与应用(六)——用 ATL 写第一个组件(vc.net)
- 基于Faster RCNN的医学图像检测(肺结节检测)
- 外文翻译 《How we decide》赛场上的四分卫 第三节
- mysql把sql文件导入到数据库
- 【毕业求职季】-听说你想去大厂看学妹,带你看看腾讯微信产品岗面经(已offer)
- weblogic.rjvm.PeerGoneException
- java oracle 字符_Oracle转义字符
- Linux(1)-实用终端命令
- python win32ui_Python创建普通菜单示例【基于win32ui模块】
- Linux 多线程可重入函数
- 基于JAVA+SpringMVC+Mybatis+MYSQL的网上玩具销售系统
- 问答| 为何会采用倒车入库(侧方位停车)方式?
- 從零開始學 ReactJS:最完整的 React 生態系入門教程
- 各 Delphi 历史版本下载合集
- 台达plc控制伺服电机编程实例_plc控制伺服电机程序实例讲解!成功都是可以复制的!...
- 单片机c语言fft函数,单片机ADC采样FFT计算试验
- TM1620芯片使用
- 第23集丨人生的智慧:练就一颗从容自在的心
- http转https后资源加载不显示
- 从Thompson Sampling到增强学习, 再谈多臂老虎机问题
热门文章
- 游戏里的角色都什么格式图片_二十年前是怎样开发游戏的?
- python绘制饼图双层_Python入门进阶:Python绘制饼图到Microsoft Excel
- python统计字符出现的次数最多的字符_Python统计字符串中出现次数最多的人名
- Visual C++——《可视化编程技术》实验报告——资源的应用—反弹的球
- Windows——右键菜单显示“管理员取得所有权”选项
- PHP——PHP读取MySQL数据库中文乱码解决方案
- Linux——主流发行版本
- HTML、HTML5、XML、XHMTL区别
- Power Transmission
- Dandan's lunch