mongodb的高级操作(聚合框架)

group by 查询 不要用java驱动带的group by ,要用2.2版本后的aggregate聚合框架来搞,经过试验速度快一倍

参考

官网:http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/
实例:http://www.yeetrack.com/?p=649


观看例子前,请先看上面对的2个参考文档,特别是官网的


例子 

[java]  view plain copy
  1. // 首先利$match筛选出where条件  
  2. BasicDBObject[] array = {  
  3.         new BasicDBObject("startTimeLong"new BasicDBObject("$gte",beginTime)),  
  4.         new BasicDBObject("startTimeLong"new BasicDBObject("$lt",endTime)) };  
  5.   
  6. BasicDBObject cond = new BasicDBObject();  
  7. cond.put("$and", array);  
  8. DBObject match = new BasicDBObject("$match", cond);  
  9.   
  10. // 利用$project拼装group需要的数据,包含optCode列、processTime列  
  11. DBObject fields = new BasicDBObject("optCode"1); // 接口  
  12. fields.put("processTime"1);// 耗时  
  13. fields.put("provinceCode"1);// 省份  
  14. fields.put("channelSubCode"1);// 渠道  
  15. fields.put("platFormCode"1);// 平台  
  16.   
  17. DBObject project = new BasicDBObject("$project", fields);  
  18.   
  19. // 利用$group进行分组  
  20. DBObject _group = new BasicDBObject("provinceCode""$provinceCode");  
  21. _group.put("channelSubCode""$channelSubCode");  
  22. _group.put("platFormCode""$platFormCode");  
  23. _group.put("optCode""$optCode");  
  24.   
  25. DBObject groupFields = new BasicDBObject("_id", _group);                    
  26. //总数  
  27.         groupFields.put("count"new BasicDBObject("$sum"1));  
  28.               //求和        
  29. groupFields.put("processTime_sum"new BasicDBObject("$sum","$processTime"));  
  30.               DBObject group = new BasicDBObject("$group", groupFields);  
  31. AggregationOutput output = MongodbUtil.getLogInfoCollection().aggregate(match, project, group);  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值