MongoDB的分组统计 group

mongodb中的分组聚合用$group,它是不能进行sort的,使用格式如下:

{ $group: { _id: <expression>, <field1>: { <accumulator1> : <expression1> }, ... } }

其中_id属性是必须要有的,目的是用来指定分组的字段或依据,field1为自定义字段,accumulator为累加器,下面以统计每天用户注册数为列

db.user.aggregate([
    {
        $group:{
            _id:{
                year:{$year:"$time"},//time为注册时间 $year表示获取年份
                month:{$month:"$time"},//$month获取月份
                day:{$dayOfMonth:"$time"}//$dayOfMonth获取多少号
            }
            count:{$sum:1}//$sum为累计,1表示累加数
        }
    }
])

如果只想注册地区为四川的则在$goup前增加一个$match:

{
    $match:{
         location:"SiChuan"
    }
},

以上两个聚合操作的java实现方式:

DBObject filterCond = new BasicDBObject();
filterCond.put("location", "SiChuan");
DBObject match = new BasicDBObject("$match", filterCond);

DBObject group = new BasicDBObject();
DBObject groupDate = new BasicDBObject();
groupDate.put("year", new BasicDBObject("$year", "$time"));
groupDate.put("month", new BasicDBObject("$month", "$time"));
groupDate.put("day", new BasicDBObject("$dayOfMonth", "$time"));
group.put("$group", new BasicDBObject("_id", groupDate));
AggregationOutput output = coll.aggregate(match, group); Iterator iterator = output.results().iterator();

第一次写博客,才发现语言组织能力真差,累死了,下班~~~

更多的聚合操作请参见这》》》http://docs.mongodb.org/manual/reference/operator/aggregation-pipeline/

时间: 2024-10-11 16:51:56

MongoDB的分组统计 group的相关文章

msql 统计函数 and 分组统计

平均数 select  avg(shop_price) from goods; 求最大最小 select min(shop_price) from goods; select max(shop_price) from goods; 求行数 select count(*) from goods; 分组统计 group 是需要耗费资源的  会有排序 slect cat_id,avg(shop_price) from goods group by cat_id; select cat_id,count

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

开发中有些按日期记录的记录需要各种维度的统计,按天,按月,按年,按小时,..分组统计,还有些需要对字段去重统计,在之前的 [Mongo] 按时间分组统计(group时间格式化)  中用group实现了按天的统计,不过使用new Date()方法会有些坑,今天看了下aggregate中,使用聚合来写个时间统计. tips: aggregate 挺复杂,弄明白了再做笔记,现在只是根据需求来查询. 数据结构还是: /* 0 */ { "_id" : ObjectId("541fcc

mongodb mapredReduce 多个条件分组(group by)

现在又一张 表它的数据格式如下: { "_id" : ObjectId("53b224e0a1ae72328a57702c"), "title" : "SECJ0118E", "criteria" : "未找到对应的错误码", "actual" : "1", "effect" : "可能引起重大问题", &q

mongodb按照时间分组统计

使用spring data mongodb v1.8 需求1. 数据结构如下.说明:改集合记录的是公司各个系统的访问情况(localPath表示系统,requestTime 表示请求时间,字符串类型,) 需求:选中某一天,然后按照系统和小时进行分组,统计这一天中每个小时各个系统的访问情况. 业务代码: Criteria criteria = new Criteria(); criteria.andOperator(Criteria.where("createTime").lt(Date

分组统计:count,group by,having, order by

--统计男女生的总人数select COUNT(*) from Student where Sex='男'select COUNT(*) from Student where Sex='女'--统计每一个班级的总人数select COUNT(*) from Student where ClassId=1--分组统计:需要按班级分组,每一个组得到一个统计结果--select 字段列表 from 表列表 where 数据源筛选 group by 分组字段列表 order by 排序字段列表selec

Excel 中使用SQL 语句查询数据(八)-----用Group by 进行分组统计

今天要和大家分享用在sql 语句中使用group by来进行分组统计.大家首先来看一下数据源. 用OLE DB 打开数据源,(步骤请参考本系列第一篇博文) 最后一条语句group by Item ,就是以Item 列分组. 结果如下 按照item 分类汇总

MongoDB 的分组操作 In C#

C#对mongodb的分组查询操作,主要通过脚本或Aggregate方法来实现,以下通过一些实例作解析: 参考资料:http://www.tuicool.com/articles/2iqUZj   http://www.cnblogs.com/vnii/archive/2012/08/23/2652891.html   http://www.cnblogs.com/zhwl/archive/2013/12/19/3482140.html 1. 根据任务id进行分组,统计每个任务的浏览数量. pu

分组统计查询(学习笔记)

查询出公司每个月支出的工资总和 --查询出公司每个月支出的工资总和 SELECT SUM(sal) FROM emp; 查询出公司的最高工资,最低工资和平均工资 --查询出公司的最高工资,最低工资和平均工资 SELECT MAX(sal),MIN(sal),ROUND(AVG(sal),2) FROM emp; 统计出公司最早雇佣和最晚雇佣的雇佣日期 --统计出公司最早雇佣和最晚雇佣的雇佣日期 SELECT MIN(hiredate) 最早雇佣日期 , MAX(hiredate) 最晚雇佣日期

010.简单查询、分组统计查询、多表连接查询(sql实例)

-------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SELECT UNION --SELECT 'HAHA',1,32--UNION ALL --全部显示/显示重复数据 即使集合相同--UNION---------将查询的两个结果集合并.结构必须一致 -->常见面试题 --SELECT 'HEHE',2,33------将查询结果添加到列表中(子查询)IN