mongodb中的分组聚合用$group,而且处理的最大数据量为100M如果超出需要写入到磁盘,使用格式如下:

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

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

db.user.aggregate([
{
$group:{
_id:{
year:{$year:{$add:["$time",28800000]}},//time为注册时间 $year表示获取年份,用add是因为mongodb存的是UTC时间需要增加8个小时
month:{$month:{$add:["$time",28800000]}},//$month获取月份
day:{$dayOfMonth:{$add:["$time",28800000]}}//$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);
BasicDBList dateList = new BasicDBList();
dateList.add("$time");
dateList.add(28800000);//解决timezone 8小时时差
DBObject time = new BasicDBObject("$add", dateList);
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/

最新文章

  1. 自定义View其实很简单系列1-12
  2. Height Half Values
  3. C#在类中用调用Form的方法
  4. windows核心编程---第七章 用户模式下的线程同步
  5. 递归绑定将数据表中的数据按层级更新到 TreeView节点上
  6. std::reverse_iterator::base
  7. phalcon: Profiling分析 profilter / Plugin结合,dispatcher调度控制器 监听sql执行日志
  8. HDFS的基本概念
  9. java之四大皆空
  10. java 正则表达式匹配字符串
  11. lc面试准备:Candy
  12. 并查集及其简单应用:优化kruskal算法
  13. wpf集成unity
  14. php和表单(1)
  15. 【树状数组】BZOJ3132 上帝造题的七分钟
  16. SQL 高级查询(层次化查询,递归)
  17. 大数据量下的SQL Server数据库自身优化
  18. 啊哈算法第四章第二节解救小哈Java实现
  19. Linux 平台 tcpdump 抓包
  20. CAS单点登录原理简单介绍

热门文章

  1. 优化 App 的启动速度
  2. .net 后台获取当前请求的设备
  3. C# unix时间戳转换
  4. Linux分区有损坏修复
  5. 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来
  6. 重构16-Encapsulate Conditional(封装条件)
  7. The requested URL Not Found问题
  8. Frameset使用教程 小结
  9. maven install与maven package 的区别
  10. JdbcTemplate 、NamedParameterJdbcTemplate、SimpleJdbcTemplate的区别