MongoDB分组统计的一个例子

原创 2015年12月04日 23:34:15

这几天被MongoDB整疯了。

算是对MongoDB有了进一步的了解,还是有很多坑等着去探索。

一个是关于MongoDB中Int64 Int32 Double三个数据类型,PHP中只有int型,那么32位系统中怎么处理的呢。

被坑之后发现:使用MongoDB PHP Driver时,如果向mongodb中insert一个数值,默认是如果这个数值一个小于等于(2^31 - 1) 那么在mongodb中存储的时候是int32存储 。但是如果这个数值大于了(2^31 -1)但是没有进行任何处理,直接使用了insert,那么在mongodb中是存储成了Double,如果想要让存储称int64 ,那么php中需要使用 new MongoInt64这个类。

那么反过来,如果mongodb中存储了一个int64的数值,使用find操作,在php中对应什么类型呢?在32位系统中,如果这个数值没有超过2^31那么正常就是一个int,如果超了,额……报出一个异常…!!叫什么MongoCursorException。很无奈吧。。

然后说说关于mongo中分组统计这个问题。

一般来说mongo中如果做分组统计,我有三个方法,一个aggregate  一个 group  然后就是直接上mapreduce

aggregate和group返回分组的结果,mapreduce的话,会将结果输出到一个临时集合里,需要再去查这个集合

前面两个用过,mapreduce目前还没试过。看资料和group的用法差不多。

先说aggregate,需要提到管道的概念,就是一节一节的管道,文档从这一节一节管道中过滤,最终得到想要的结果

一般是先用{"$match":{}} 过滤一下,相当于sql中的where条件,然后可能需要{"$project":{}} 需要对文档进行一个初步的整理,删除,添加,修改一些字段(属性) 然后就是最终要的{"$group":{}} $group中一般是

 { "$group" : { "_id" : { "citycode":"$citycode" , "uid" : "$uid"  } , "count":{ "$sum" : 1 } } } 

以citycode和uid分组,相当于sql中group by citycode , uid 经过这个之后,文档就只剩下了 citycode  uid  count 这三个字段了

可以使用多个$goup。

group这个命令,db.collection_name.group()  首先是 key 或者是keyf  就是相当于分组  key比较简单

key : "citycode" 就是以citycode进行分组   

keyf可以复杂一点   keyf : function(doc){ return { "citycode":doc.citycode , "uid": doc.uid} ;}

这里的doc是所有的文档,使用citycode和uid进行分组,结果就是分好组的文档,所有文档还是存在的

在 reduce:function Rdeuce(doc , out){ } 可以理解就是将一组的文档传进来进行循环,输出一个out文档。out文档是一个{ } 哦 。

今天先到这吧,思绪有点乱了。改天整理。。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

MongoDB中的一个分组统计的查询(Group ... Distinct)

数据很简单,如下: > db.t2.find(); { "country" : "china", "province" : "sh", "userid" : "a" } {  "country" : ...
  • lff0305
  • lff0305
  • 2015年11月25日 11:51
  • 23637

[Mongo] 按时间分组统计(group时间格式化)

参考: http://stackoverflow.com/questions/5168904/group-by-dates-in-mongodb 分组的key可以使用原有的字段,也可以使用一个func...
  • lzz957748332
  • lzz957748332
  • 2014年09月22日 19:10
  • 8938

MongoDB MapReduce 分组统计

今天要写一个MapReduce去统计日志信息。 var map=function(){ emit(this.description,{"count":1}); } var reduce=...
  • gua___gua
  • gua___gua
  • 2015年12月02日 16:02
  • 1040

Spring-date操作Mongodb分组统计

Java使用Spring提供的Spring-data-mongodb来进行操作Mongodb进行分组、统计等操作示例。 // 返回的字段 ProjectionOper...
  • shiweichn
  • shiweichn
  • 2016年12月27日 11:22
  • 2089

Mongodb中数据聚合之基本聚合函数count、distinct、group

在之前的文章Mongodb中数据聚合之MapReduce>中,我们提到过Mongodb中进行数据聚合操作的一种方式——MapReduce,但是在大多数日常使用过程中,我们并不需要使用MapReduce...
  • andamajing
  • andamajing
  • 2016年05月21日 13:26
  • 18526

学习MongoDB 十一: MongoDB聚合(Aggregation Pipeline基础篇上)(三)

db.collection.aggregate()是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个节点的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应...
  • congcong68
  • congcong68
  • 2016年06月09日 10:47
  • 11578

关于MongoDB分组统计的问题

最近在搞新项目开发,很多逻辑都是要看老项目的代码,老项目用的是oracle库,新项目换了MongoDb,那么问题来了,如何把sql代码转换成NoSql? 下面分享下今天搞的功能,把如下代码转换成mo...
  • One_Rabbit2016
  • One_Rabbit2016
  • 2016年09月03日 08:56
  • 1357

java:Mongodb 分组统计应用group的使用(含场景)

------------------------场景----------------- mongodb中数据集合(ABC123)包含的指标进行统计分析,指标(指标在mongodb中实际以字母、数字组...
  • MCpang
  • MCpang
  • 2012年11月30日 10:17
  • 19984

[Mongo]分组统计时间 aggregate,group,distinct

开发中有些按日期记录的记录需要各种维度的统计,按天,按月,按年,按小时,。。分组统计,还有些需要对字段去重统计,在之前的 [Mongo] 按时间分组统计(group时间格式化)  中用group实现了...
  • lzz957748332
  • lzz957748332
  • 2014年10月09日 15:55
  • 9346

Mongodb简单例子

1、实体类 @Document(collection = "t_user") public class MongoUser implements Serializable{     private ...
  • wuliu_forever
  • wuliu_forever
  • 2016年09月19日 09:21
  • 1097
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MongoDB分组统计的一个例子
举报原因:
原因补充:

(最多只允许输入30个字)