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文档是一个{ } 哦 。

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

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

相关文章推荐

图片缩放和裁剪 缩放和裁剪图片

import java.awt.Canvas;import java.awt.Graphics;import java.awt.image.AreaAveragingScaleFilter;impor...

SpringMVC如何传值

新人自学SpringMVC,记录下学习心得,愿与众位分享。如有什么疏漏之处还望前辈们指教(求轻拍) 昨天笔者刚刚成功实现了Spring+SpringMVC+Hibernate框架的整合,本篇日志是在昨...

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

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

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

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

关于MongoDB分组统计的问题

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

mongodb的mapreduce的分组统计

m = function (){ emit(this.hs,{customid_count:this.customid,salescountry_count:salescountry,usd_sum:...

对分组统计数据进行分析

  • 2014年02月18日 17:13
  • 1KB
  • 下载

分组统计报表

  • 2008年03月25日 14:23
  • 910B
  • 下载

R中利用apply、tapply、lapply、sapply、mapply、table等函数进行分组统计

原文链接 apply函数(对一个数组按行或者按列进行计算): 使用格式为: apply(X, MARGIN, FUN, ...) 其中X为一个数组;MARGIN为一个向量(表示要将...

Oracle分组统计

  • 2013年01月06日 09:53
  • 47KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MongoDB分组统计的一个例子
举报原因:
原因补充:

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