在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.之后,就是开始执行的各个步骤.

  1. initial.初始化分组用的累加器.如果我们在结果中需要分组依赖列之外的列,那么可以把这些列放入分组的累加器中.所谓累加器,可以是一个对象或者数组.每一个分组会有一个累加器对象.
  2. $reduce.当一条记录被添加到一个分组中时被调用.回调函数的形式是function(cur,perv).其中,cur是当前记录的对象,perv是上一次$reduce函数执行时分组文档对象.
    • 这个函数是添加附加信息的关键函数.分组文档对象,包含了一个分组的所有信息,我们在initial中声明的累加器,就是该对象的一个属性,我们可以对该对象添加任何的属性,该对象的所有属性都会被作为结果显示出来.
    • 由于每个分组都有一个文档对象,可以很方便地在文档对象中记录该分组的详细信息.记录的信息都存储在cur对象上(该对象是数据行的映射,含有各个数据列的值).
  3. finalize.当一个分组被处理完毕时被调用.回调函数的形式是function(doc).参数doc就是该分组的文档对象.如果我们需要做统计分组的记录count之类的信息,可以写在该函数内.

现在,使用MS SQL和Mongodb的实际gourp操作来说明两者的区别.

首先,在MS SQL和Mongodb中创建相同的表(表名为person),并插入相同的数据.

  • 现在,我们要求按照性别分组.
    1. 在SQL中
    2. 在Mongodb中
  • 接着,需要知道每个分组中的人的数目.
    1. 在SQL中.
    2. 在Mongodb中
  • 把分组中每个人的Name查询出来,在SQL中,需要借助其他的手段,这里只演示Mongodb中的做法.
  • 同时记录分组内的人数,和组内人的Name.有两种方式可以实现.
    •  

MongoDB中的group的更多相关文章

  1. 浅析mongodb中group分组

    这篇文章主要介绍了浅析mongodb中group分组的实现方法及示例,非常的简单实用,有需要的小伙伴可以参考下. group做的聚合有些复杂.先选定分组所依据的键,此后MongoDB就会将集合依据选定 ...

  2. MongoDB中的数据聚合工具Aggregate和Group

    周煦辰 2016-01-16 来说说MongoDB中的数据聚合工具. Aggregate是MongoDB提供的众多工具中的比较重要的一个,类似于SQL语句中的GROUP BY.聚合工具可以让开发人员直 ...

  3. mongoDB 分组并对分组结果筛选类似于SQL中的(group by xxx having ) 附带Java代码

    今天需要做一个筛选程序,因为数据放在mongodb中,没写过分组的查询语句,查了一些资料,终于写出来了,分享给各位小伙伴 需求是 查询 学员 在2019-07-29之后未同步的数据(同一个学员需要2条 ...

  4. 使用aggregate在MongoDB中查找重复的数据记录

    我们知道,MongoDB属于文档型数据库,其存储的文档类型都是JSON对象.正是由于这一特性,我们在Node.js中会经常使用MongoDB进行数据的存取.但由于Node.js是异步执行的,这就导致我 ...

  5. 在MongoDB中实现聚合函数 (转)

    随着组织产生的数据爆炸性增长,从GB到TB,从TB到PB,传统的数据库已经无法通过垂直扩展来管理如此之大数据.传统方法存储和处理数据的成本将会随着数据量增长而显著增加.这使得很多组织都在寻找一种经济的 ...

  6. MongoDB实战指南(五):MongoDB中的聚集分析

    聚集操作是对数据进行分析的有效手段.MongoDB主要提供了三种对数据进行分析计算的方式:管道模式聚集分析,MapReduce聚集分析,简单函数和命令的聚集分析. 1. 管道模式进行聚集 这里所说的管 ...

  7. MongoDB中的分组

    一.MongoDB中的Count函数.Distinct函数以及分组 准备工作,插入一个班级的文档 > for(var i=0;i<10;i++){ ... db.Classes.inser ...

  8. 【转载】MongoDB中的MapReduce 高级操作介绍

    转载自残缺的孤独 1.概述 MongoDB中的MapReduce相当于关系数据库中的group by.使用MapReduce要实现两个函数Map和Reduce函数.Map函数调用emit(key,va ...

  9. 使用highcharts显示mongodb中的数据

    1.mongodb数据表相关 # 显示数据库 show dbs # 数据库 use ceshi # 显示表 show tables # 创建集合 db.createCollection('infoB' ...

随机推荐

  1. MySql5.5忘记root密码的解决方法

    试了很多方法,下面这种方法是确保可以成功的,呵呵.转载自:http://hi.baidu.com/bjben/item/722bb50b27baf1dcdde5b097. 申明:本文章应该属于转载,但 ...

  2. libgo 2.0发布

    libgo 是一个使用 C++ 编写的协作式调度的stackful协程库, 同时也是一个强大的并行编程库. 设计之初是为高并发分布式Linux服务端程序开发提供底层框架支持,可以让链接进程序的同步的第 ...

  3. 深入解析 ext2 文件系统

     很久以来,就想写一篇关于ext 家族文件系统的文章,源于我刚工作的时候,曾经一不小心rm -rf,误删除了很多文件,当时真想有个数据恢复软件能帮我把数据回复了.当然学习数据恢复,首先要学习文件系统. ...

  4. 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)

    代码如下: public int Sum_Solution(int n) { int temp = n; boolean b = (temp>0)&&(temp += Sum_S ...

  5. 项目源码--Android聚合视频类播放器

    下载源码 技术要点:  1.高效支持主流的视音频格式 2.本地视频的播放与管理 3.聚合电视在线直播 4.聚合优酷.搜狐.乐视.爱奇艺等多种在线视频 5.优质播放,包含播放.暂停,声音.亮度调整等功能 ...

  6. IDEA社区版运行并发布web项目

    IDEA社区版相对收费版少了很多功能,其中包括tomcat等web服务器的支持.网上大部分的IDEA web应用发布教程都是基于收费版的,社区版并没有这么直接的图形化工具可以运行或发布web应用.幸运 ...

  7. 用PredicateBuilder实现Linq动态拼接查询

    在使用Linq查询的时候,特别是如果你在使用Entiry Framwork,有时会遇到动态查询的情况(客户的查询条件是不固定的拼接查询).我们能想到的第一方案应该是拼接SQL,的确这样是可以达到我们的 ...

  8. java 数组初始化

    一维数组 1)   int[] a;   //声明,没有初始化 2)   int[] a=new int[5];   //初始化为默认值,int型为0 3)   int[] a={1,2,3,4,5} ...

  9. Socket 之 原理与编程基础

    一.Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机的 ...

  10. [Javascript]jquery $(document).ready() 与window.onload的区别

    引用:http://www.jb51.net/article/21628.htm Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload ...