mongodb聚合操作
1. mongodb的聚合是什么
2. mongodb的常用管道和表达式
2.1 常用管道命令
- $group: 将集合中的⽂档分组, 可⽤于统计结果
- $match: 过滤数据, 只输出符合条件的⽂档
- $project: 修改输⼊⽂档的结构, 如重命名、 增加、 删除字段、 创建计算结果
- $sort: 将输⼊⽂档排序后输出
- $limit: 限制聚合管道返回的⽂档数
- $skip: 跳过指定数量的⽂档, 并返回余下的⽂档
2.2 常用表达式
- $sum: 计算总和, $sum:1 表示以⼀倍计数
- $avg: 计算平均值
- $min: 获取最⼩值
- $max: 获取最⼤值
- $push: 在结果⽂档中插⼊值到⼀个数组中
3. 管道命令之$group
3.1 按照某个字段进行分组
- db.db_name.aggregate是语法,所有的管道命令都需要写在其中
- _id 表示分组的依据,按照哪个字段进行分组,需要使用$gender表示选择这个字段进行分组
- $sum:1 表示把每条数据作为1进行统计,统计的是该分组下面数据的条数
3.2 group by null
- _id:null 表示不指定分组的字段,即统计整个文档,此时获取的counter表示整个文档的个数
3.3 数据透视
- 统计不同性别的学生db.stu.aggregate({$group:{_id:null,name:{$push:"$name"}}})
- 使用$$ROOT可以将整个文档放入数组中db.stu.aggregate({$group:{_id:null,name:{$push:"$$ROOT"}}})
4.管道命令之$match
- 查询年龄大于20的学生db.stu.aggregate({$match:{age:{$gt:20}})
- 查询年龄大于20的男女学生的人数db.stu.aggregate({$match:{age:{$gt:20}}{$group:{_id:"$gender",counter:{$sum:1}}})
5. 管道命令之$project
- 查询学生的年龄、姓名,仅输出年龄姓名db.stu.aggregate({$project:{_id:0,name:1,age:1}})
- 查询男女生人生,输出人数db.stu.aggregate({$group:{_id:"$gender",counter:{$sum:1}}}{$project:{_id:0,counter:1}})
6. 管道命令之$sort
- 查询学生信息,按照年龄升序db.stu.aggregate({$sort:{age:1}})
- 查询男女人数,按照人数降序db.stu.aggregate({$group:{_id:"$gender",counter:{$sum:1}}},{$sort:{counter:-1}})
7. 管道命令之$skip 和 $limit
- $limit限制返回数据的条数
- $skip 跳过指定的文档数,并返回剩下的文档数
- 同时使用时先使用skip在使用limit
- 查询2条学生信息db.stu.aggregate({$limit:2})
- 查询从第三条开始的学生信息db.stu.aggregate({$skip:3})
- 统计男女生人数,按照人数升序,返回第二条数据db.stu.aggregate({$group:{_id:"$gender",counter:{$sum:1}}},{$sort:{counter:-1}},{$skip:1},{$limit:1})
mongodb聚合操作的更多相关文章
- MongoDB 聚合操作
在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...
- MongoDB 聚合操作(转)
在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...
- mongodb聚合查询-aggregate
Mongodb-aggregate 在工作中经常遇到一些mongodb的聚合操作,和mysql对比起来,mongo存储的可以是复杂的类型,比如数组,字典等mysql不善于处理的文档型结构,但是mong ...
- MongoDB学习笔记——聚合操作之聚合管道(Aggregation Pipeline)
MongoDB聚合管道 使用聚合管道可以对集合中的文档进行变换和组合. 管道是由一个个功能节点组成的,这些节点用管道操作符来进行表示.聚合管道以一个集合中的所有文档作为开始,然后这些文档从一个操作节点 ...
- MongoDB 基本操作和聚合操作
一 . MongoDB 基本操作 基本操作可以简单分为查询.插入.更新.删除. 1 文档查询 作用 MySQL SQL MongoDB 所有记录 SELECT * FROM users; db ...
- Yii2的mongodb的聚合操作
最近项目使用到mongodb的聚合操作,但是yii文档中对这方面资料较少,记录下 $where['created_time'] = ['$gt' => "$start_date_str ...
- MongoDB中的聚合操作
根据MongoDB的文档描述,在MongoDB的聚合操作中,有以下五个聚合命令. 其中,count.distinct和group会提供很基本的功能,至于其他的高级聚合功能(sum.average.ma ...
- MongoDB的聚合操作以及与Python的交互
上一篇主要介绍了MongoDB的基本操作,包括创建.插入.保存.更新和查询等,链接为MongoDB基本操作. 在本文中主要介绍MongoDB的聚合以及与Python的交互. MongoDB聚合 什么是 ...
- MongoDB入门---聚合操作&管道操作符&索引的使用
经过前段时间的学习呢,我们对MongoDB有了一个大概的了解,接下来就要开始使用稍稍深入一点的东西了,首先呢,就是MongoDB中的聚合函数,跟mysql中的count等函数差不多.话不多说哈,我们先 ...
随机推荐
- Echars 地图属性详解
1.引入echarts库文件 <script charset="utf-8" type="text/javascript" language=" ...
- ThingJS平台制作第一人称视角下的巡更效果
今天想要做一个类似巡更的过程,就像是在学校保安巡更,小区保安巡更一样.巡更需要用到相应的场景,比如说:园区.学校.超市以及工厂等等,然后需要规划好路线也就是巡更的路线,并且视角要跟随路线来变换,从而达 ...
- 【原创】qlogic网卡软中断不均衡问题分析
引子 使用qlogic QL45000网卡测试业务性能,发现cpu软中断分布不均衡,而且很有规律,导致cpu空闲也不是很均衡, 会影响业务稳定性. 设备使用3张网卡Qlogic网卡,配置为4*25G模 ...
- centOS7 关闭swap
[root@cdh- sbin]# free -g total used free shared buff/cache available Mem: Swap: [root@cdh- sbin]# c ...
- 聚宽获取财务数据+DataFrame写入txt
from jqdata import jy from jqdata import * #获取股票列表,这里是板块内股票 pool=get_industry_stocks(',date='2016-09 ...
- Selenium+TestNG+Maven+Jenkins+SVN(转载)
转载自:https://blog.csdn.net/u014202301/article/details/72354069 一. 创建Maven项目,下载Selenium和TestNG的依赖(依赖可以 ...
- LINUX | 谷歌云开启SSH及设置root密码
一.设置root密码 1.先选择从浏览器打开ssh连接服务器 2.切换到root账号 sudo -i 3.设置root密码 passwd 然后会要求输入新密码,然后再重复一次密码,输入密码的时候不会显 ...
- FOB注意事项
1. FOB是我们作为贸易公司去联系物流公司将货送到码头,缴纳FOB cost 以后,海关安排码头的人送到船上. 2.在这之前,买方自己订船,然后发给卖方入货通知,卖方安排发货. 3.FOB cost ...
- poj3250(单调栈模板题)
题目链接:https://vjudge.net/problem/POJ-3250 题意:求序列中每个点右边第一个>=自身的点的下标. 思路:简单介绍单调栈,主要用来求向左/右第一个小于/大于自身 ...
- ThreadPoolExecutor源码详解
ExecutorService使用线程池中可用的线程执行每个提交的任务,这些线程通常都是使用工厂方法配置 线程池解决两种不同的问题:提高处理大量异步任务的性能(通过减少每个线程的唤醒时间) 提供一种管 ...