文档章节

2.0.1、分组功能的详细说明

 来志辉
发布于 2016/06/02 10:57
字数 594
阅读 4
收藏 0
  • mongodb 分组查询是一个相对复杂的功能 下面会系统的说明其中的关系
  • group()分组:
  • 命名:db.person.group({
  • key:{"将被分组的key(字段名)":true} ,
  • 例如: "key":{"age":true} 在分组的结果中就会显示每组“key”的value。
  • initial :{"num":0}, 是为了初始化累加器的键值,我们可以把这个所谓的“累加器”当作一个文档,这个文档中存放的是在分组开发过程中收集、计算出的信息,不一定是集合文档中的原信息,这里需要注意。
  •   name用于表示每个分组中第一个文档对应调用“$reduce”指定函数时的参数初始化,后续该分组的文档对应调用“$reduce”指定函数时,会不断“累加”,保留住每次对“num”所做的更新结果。
    
  • $reduce:function(doc,prev){ prev.num++}
  • “doc”代表分组开发过程中的每一个集合中的文档,而“prev”则代表“累加器文档”的累加状态,当一个分组的组员划分完毕时,这个“prev”文档中的键值对的最终状态就是我们想要的结果。
  • 完整写法
  • db.person.group({
  • key:{name:true,age:true},
  • initial:{num:0},
  • $reduce:function(doc,prev){
  • prev.num++
    
  • }});
  • 第二种分组方法
  • db.runCommand({group:
  • {
    
  •     ns:"person",
    
  •     key:{name:true},
    
  •     initial:{num:0},
    
  •     $reduce:function(doc,prev){
    
  •     prev.num++}
    
  • }
    
  • });
  • 可选参数,并非必添
  • 筛选条件分组查询
  • condition:{key:条件}
  • 例子:
  • db.person.group({
  • key:{name:true},
  • initial:{num:0},
  • $reduce:function(doc,prev){
  • prev.num++
  • },
  • condition:{name:"Ja"}});
  • 第二种写法
  • db.runCommand({group:
  • {
    
  •     ns:"person",
    
  •     key:{name:true},
    
  •     initial:{num:0},
    
  •     $reduce:function(doc,prev){
    
  •     prev.num++},
    
  •     condition:{name:"Ja"}
    
  • }
    
  • });
  • 普通的$where查询:
  • condition:{$where:function(){
  • return this.age>1;
  • }}
  • 使用函数返回值分组 注意,$keyf指定的函数一定要返回一个对象
  • db.person.group({
  • $keyf:function(doc)
  • {return {age:doc.age};},
  • initial:{num:0},
  • $reduce:function(doc,prev){
  • prev.num++
    
  • }
  • });
  • 第二种写法
  • db.runCommand({group:
  • {
    
  •     ns:"test",
    
  •     $keyf:function(doc){return {age:doc.age};},
    
  •     initial:{num:0},
    
  •     $reduce:function(doc,prev){
    
  •     prev.num++}
    
  • }
    
  • });
  • finalize用法 注:每一组文档执行完后,都会触发此方法,终结器
  • 用法:
  • db.person.group({
  • key:{name:true},
  • initial:{num:0},
  • $reduce:function(doc,prev){
  • prev.num++
    
  • },
  • finalize: function(doc){
  • if(doc.num>5){
  • doc.count=doc.num;
  • }
  • delete doc.num; }
  • });
  • 表示在分组统计后的结果并不是期待的结果,举个例子说明,Ja这个用户统计出来的age是5个,B工这个用户统计出来的age是15个,但只想要age大约5个的,就加参数finalize

© 著作权归作者所有

粉丝 0
博文 5
码字总数 2196
作品 0
昌平
私信 提问
pfSense 2.0.1 发布

pfSense是源自于m0n0wall的操作系统。它使用的技术包括Packet Filter,FreeBSD 6.x(或DragonFly BSD,假如ALTQ和CARP完成了的话)的ALTQ(以出色地支持分组队列),集成的包管理系统(以为其...

红薯
2011/12/21
2.6K
0
Scala IDE 2.0.1 RC1 发布,Eclipse 的 Scala 插件

Scala IDE 2.0.1 发布首个 RC 版本,支持 Eclipse 3.6 和 3.7 版本。详细改进内容请看发行说明。 ScalaIDE 是一个 Eclipse 插件,提供 Scala 集成开发工具。主要的功能包括:同一个项目中混合...

红薯
2012/03/22
1K
3
Yii 2.0.1 发布

Yii Framework 2.0.1 发布,此版本现已提供下载:http://www.yiiframework.com/download/。 Yii 2.0.1 是 Yii 2.0 的分支版本,包括大约 90 个新特性和 bug 修复。完整改进列表请看更新日志。...

raykwok
2014/12/08
3.9K
18
ConVirt 2.0.1 中文版发布,图形化虚拟机管理

最近花点时间作了一下ConVirt 2.0.1社区版的汉化工作,现按照ConVirt 2.0.1社区版所使用的GPLv2授权协议发布出来。欢迎各位正在研究/使用云计算相关技术的朋友试用并提出宝贵意见。 除了本人...

小编辑
2011/09/22
4.9K
4
RocketMQ SpringBoot 项目 v2.0.1 版本发布

为了帮助开发者在Spring Boot中快速集成RocketMQ并支持Spring Message规范,使开发者更便捷地使用 RocketMQ,Apache RocketMQ社区于近期正式发布rocketmq-spring 2.0.1版本。 它基于Spring ...

局长
01/23
2.9K
7

没有更多内容

加载失败,请刷新页面

加载更多

zk中ToBeAppliedRequestProcessor解析

ToBeAppliedRequestProcessor在Leader中 在已处理事务和最后处理事务处理器之间,处理器链上下一个是FinalRequestProcessor public void processRequest(Request request) throws RequestPro...

writeademo
33分钟前
3
0
Allegro快捷键设置-PCB环境

立题简介: 内容:简单介绍Allegro绘制的PCB环境下的快捷键; 来源:实际使用得出; 作用:对Allegro绘制PCB快捷键进行介绍; PCB环境:Cadence 16.6; 立题详解: 对“allegro”板而言,其在...

demyar
34分钟前
3
0
idea maven web项目启动build时报错java.lang.NullPointerException

之前还好好的,重启一下idea就报这个错了,大概率是tomcat没杀掉端口被占用了,在tomcat配置中更换一下sever端口就好了

宇辰OSC
37分钟前
3
0
weed3-2.3.1.查询之输出

Weed3 一个超轻量级ORM框架(只有0.1Mb哦) 源码:https://github.com/noear/weed3 源码:https://gitee.com/noear/weed3 查询可是个复杂的话题了,可能我们80%的数据库处理都在查询。 今天先...

刘之西东
38分钟前
3
0
【Android JetPack系列】数据绑定:DataBinding

参考MVVM

Agnes2017
46分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部