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' ...
随机推荐
- Some tips on using HashSet<T> and List<T>
This article is written based on my colleague's review Most of the times, when I want to use a colle ...
- 使用ASP.NET操作IIS7中使用应用程序
使用ASP.NET操作IIS7中使用应用程序 在最新发布的启明星Portal里,增加了安装程序,下面说一下.NET对IIS7操作.IIS7的操作和IIS5/6有很大的不同,在IIS7里增加了 Mi ...
- 窗口界面编程之一:VB实现简单异形窗口
一.运行效果图(在Win8里的运行效果,在XP里运行就不能体现出来,因为我使用的XP的界面效果) 二.编译环境:Visual Basic 6.0 (SP6) 三.实现原理:通过区域合并 四.使用API ...
- 读取svg图片为UIBezierPath,开心做动画
动画预览 先扯淡 最近手痒又想整点动画玩玩,但是想了几个主意发现稍微复杂一点的手写都一定会累爆.这篇文章记录一下今天折腾的一个方案.说来简单,就是用矢量设计工具舒舒服服的做好设计,然后输出成 svg ...
- mysqldump 安全 --skip-add-drop-table
[root@localhost data]# mysqldump -uroot --master-data=2 -p --single-transaction --skip-add-drop-ta ...
- ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】4.5
摘要:VB/C#.Net实体代码生成工具(EntitysCodeGenerate)[ECG]是一款专门为.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的程序代码基于OO.ADO.N ...
- __attribute__((unused))
在gcc手册中找到了有关的解释: unused:This attribute, attached to a function, means that the function is meant to ...
- Play on Words 欧拉通路(回路)判断
Play on Words note: 判断一下连通性. #include <iostream> #include <cstdio> #include <cstring ...
- Android(java)学习笔记263:Android下的属性动画(Property Animation)
1. 属性动画(Property Animation)引入: 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(fra ...
- 【AsyncTask整理 2】 AsyncTask方法代码演示
Android SDK为我们提供了一个后台任务的处理工具AsyncTask.AsyncTask就是一个封装过的后台任务类顾名思义就是异步任务,方便我们维护,Android开发网提示这样的好处可以解决一 ...


