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