MongoDB中的group
在Mongodb的查询中,有类似于SQL中group by功能的group函数.两者的功能有些类似,但是区别也是比较明显的.
对于SQL来说,group by的作用就是安装依据列来将数据表中的记录分成一个个的组,而查询结果中,只能Select出来Group BY中含有的列,或者使用了聚合函数(sum,count,avg,max,min)的其它列.并且只能在数值类型上的列上使用聚合函数.
但是,在Mongodb中,我们可以在结果中显示既非Group by中的列,又没有使用聚合函数的列.这样,我们就能得到一个组内的更加详细的信息.而在SQL中要做到这点,需借助子查询等其它复杂的手段才能做到.
Mongodb的group函数,更像是一个定义好了各个中间步骤的模板方法,使用者以函数或者其他形式来参与中间的各个步骤.首先,key属性用来指定分组的依据列.至于列名后面的true/false参数,有介绍说是用来决定是否展示每个分组的依据列的列名的.但是,在我目前使用的版本上,是没有任何区别的,一般就设置为true.之后,就是开始执行的各个步骤.
- initial.初始化分组用的累加器.如果我们在结果中需要分组依赖列之外的列,那么可以把这些列放入分组的累加器中.所谓累加器,可以是一个对象或者数组.每一个分组会有一个累加器对象.
- $reduce.当一条记录被添加到一个分组中时被调用.回调函数的形式是function(cur,perv).其中,cur是当前记录的对象,perv是上一次$reduce函数执行时分组文档对象.
- 这个函数是添加附加信息的关键函数.分组文档对象,包含了一个分组的所有信息,我们在initial中声明的累加器,就是该对象的一个属性,我们可以对该对象添加任何的属性,该对象的所有属性都会被作为结果显示出来.
- 由于每个分组都有一个文档对象,可以很方便地在文档对象中记录该分组的详细信息.记录的信息都存储在cur对象上(该对象是数据行的映射,含有各个数据列的值).
- finalize.当一个分组被处理完毕时被调用.回调函数的形式是function(doc).参数doc就是该分组的文档对象.如果我们需要做统计分组的记录count之类的信息,可以写在该函数内.
现在,使用MS SQL和Mongodb的实际gourp操作来说明两者的区别.
首先,在MS SQL和Mongodb中创建相同的表(表名为person),并插入相同的数据.

- 现在,我们要求按照性别分组.
- 在SQL中

- 在Mongodb中

- 接着,需要知道每个分组中的人的数目.
- 在SQL中.

- 在Mongodb中

- 在SQL中.
- 把分组中每个人的Name查询出来,在SQL中,需要借助其他的手段,这里只演示Mongodb中的做法.
- 同时记录分组内的人数,和组内人的Name.有两种方式可以实现.
-
MongoDB中的group的更多相关文章
- 浅析mongodb中group分组
这篇文章主要介绍了浅析mongodb中group分组的实现方法及示例,非常的简单实用,有需要的小伙伴可以参考下. group做的聚合有些复杂.先选定分组所依据的键,此后MongoDB就会将集合依据选定 ...
- MongoDB中的数据聚合工具Aggregate和Group
周煦辰 2016-01-16 来说说MongoDB中的数据聚合工具. Aggregate是MongoDB提供的众多工具中的比较重要的一个,类似于SQL语句中的GROUP BY.聚合工具可以让开发人员直 ...
- mongoDB 分组并对分组结果筛选类似于SQL中的(group by xxx having ) 附带Java代码
今天需要做一个筛选程序,因为数据放在mongodb中,没写过分组的查询语句,查了一些资料,终于写出来了,分享给各位小伙伴 需求是 查询 学员 在2019-07-29之后未同步的数据(同一个学员需要2条 ...
- 使用aggregate在MongoDB中查找重复的数据记录
我们知道,MongoDB属于文档型数据库,其存储的文档类型都是JSON对象.正是由于这一特性,我们在Node.js中会经常使用MongoDB进行数据的存取.但由于Node.js是异步执行的,这就导致我 ...
- 在MongoDB中实现聚合函数 (转)
随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据.传统方法存储和处理数据的成本将会随着数据量增长而显著增加.这使得很多组织都在寻找一种经济的 ...
- MongoDB实战指南(五):MongoDB中的聚集分析
聚集操作是对数据进行分析的有效手段.MongoDB主要提供了三种对数据进行分析计算的方式:管道模式聚集分析,MapReduce聚集分析,简单函数和命令的聚集分析. 1. 管道模式进行聚集 这里所说的管 ...
- MongoDB中的分组
一.MongoDB中的Count函数.Distinct函数以及分组 准备工作,插入一个班级的文档 > for(var i=0;i<10;i++){ ... db.Classes.inser ...
- 【转载】MongoDB中的MapReduce 高级操作介绍
转载自残缺的孤独 1.概述 MongoDB中的MapReduce相当于关系数据库中的group by.使用MapReduce要实现两个函数Map和Reduce函数.Map函数调用emit(key,va ...
- 使用highcharts显示mongodb中的数据
1.mongodb数据表相关 # 显示数据库 show dbs # 数据库 use ceshi # 显示表 show tables # 创建集合 db.createCollection('infoB' ...
随机推荐
- volley开源库乱码问题总结(持续更新)
之前Android开发一直用的是多层封装的Final框架.最近开始学习使用小巧的volley. 在使用该框架的过程中,出现了数次乱码问题,再次做以总结. 分别是返回数据乱码和提交参数乱码两个问题: 一 ...
- iOS开发——实用OC篇&多种定时器详细介绍
多种定时器详细介绍 在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 然而,在iOS中有很多方法完成以上的任务,到底有 ...
- ztree使用系列四(ztree实现同级拖拽排序并将排序结果保存数据库)
ztree这个系列的最后一篇,也是ztree功能强大的体现之中的一个--排序功能. ztree能够实现全部节点之间任意的拖拽排序功能.我这里依据须要实现了仅仅同意同级之间任意拖拽排序,事实上原理都一样 ...
- BigPipe
BigPipe是一个重新设计的基础动态网页服务体系.大体思路是,分解网页成叫做Pagelets的小块,然后通过Web服务器和浏览器建立管道并管理他们在不同阶段的运行.这是类似于大多数现代微处理器的流水 ...
- pg viedio
http://blog.163.com/digoal@126/blog/static/16387704020141229159715/
- IOS中类和对象还有,nil/Nil/NULL的区别
转自:http://blog.sina.com.cn/s/blog_5fb39f910101akm1.html 类与对象的概念 类是对同一类事物高度的抽象,类中定义了这一类对象所应具有的静态属性(属性 ...
- Java图片处理(二)图片加水印
图片加水印,是通过图片重叠绘制实现的.实现代码如下: public static void press(String pressImg, String pressText, String target ...
- FileSystemWatcher触发多次Change事件的解决办法 .
最近要用到FileSystemWatcher来监控某个目录中的文件是否发生改变,如果改变就执行相应的操作.但在开发过程中,发现FileSystemWatcher在文件创建或修改后,会触发多个Creat ...
- Coin Test
描述 As is known to all,if you throw a coin up and let it droped on the desk there are usually three r ...
- find your present (2)
Problem Description In the new year party, everybody will get a "special present".Now it's ...


