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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaozonglu/article/details/50180881

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

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

mongodb group分组个数过滤

db.books.aggregate([ { $group : { _id : {name:"$name"}, count: { $sum: 1 } } }, {$match:{count...
  • feihuadao
  • feihuadao
  • 2016-05-07 21:24:47
  • 1496

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

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

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

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

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

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

php7中使用mongoDB的聚合操作对数据进行分组求和统计操作

本文将介绍mongoDB使用aggregate对数据分组,求和。给出shell命令行写法,php7中的写法,也将给出相同数据结构mysql命令行写法。 mongoDB collection a_t...
  • xiojing825
  • xiojing825
  • 2017-08-27 18:33:31
  • 1229

MongoDB中复杂的分组查询统计(MapReduce)

按日期、行为、用户统计行为表 由于行为表是分片表,不能使用group,只能采用MapReduce进行分组统计: db.runCommand({ mapreduce:"pmhuseraction", m...
  • fengyily
  • fengyily
  • 2012-06-13 16:08:13
  • 5311

关于MongoDB分组统计的问题

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

MongoDB中强大的统计框架Aggregation使用实例解析

MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 这篇文章主要介绍了MongoDB中强大的统计框架Aggreg...
  • zxjiayou1314
  • zxjiayou1314
  • 2016-12-29 16:31:11
  • 1081

Java-mongodb-AggregationOutput(分组、统计)

比较常用的有: •$project - 可以重构数据 •$match - 可以实现类似query的功能 •$limit - 限制返回个数 •$skip - 同上 •$unwind - 可以将一...
  • luckycz
  • luckycz
  • 2015-07-17 11:28:09
  • 4417
收藏助手
不良信息举报
您举报文章:MongoDB分组统计的一个例子
举报原因:
原因补充:

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