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

参考

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

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

例子

    1. // 首先利$match筛选出where条件
    2. BasicDBObject[] array = {
    3. new BasicDBObject("startTimeLong", new BasicDBObject("$gte",beginTime)),
    4. new BasicDBObject("startTimeLong", new BasicDBObject("$lt",endTime)) };
    5. BasicDBObject cond = new BasicDBObject();
    6. cond.put("$and", array);
    7. DBObject match = new BasicDBObject("$match", cond);
    8. // 利用$project拼装group需要的数据,包含optCode列、processTime列
    9. DBObject fields = new BasicDBObject("optCode", 1); // 接口
    10. fields.put("processTime", 1);// 耗时
    11. fields.put("provinceCode", 1);// 省份
    12. fields.put("channelSubCode", 1);// 渠道
    13. fields.put("platFormCode", 1);// 平台
    14. DBObject project = new BasicDBObject("$project", fields);
    15. // 利用$group进行分组
    16. DBObject _group = new BasicDBObject("provinceCode", "$provinceCode");
    17. _group.put("channelSubCode", "$channelSubCode");
    18. _group.put("platFormCode", "$platFormCode");
    19. _group.put("optCode", "$optCode");
    20. DBObject groupFields = new BasicDBObject("_id", _group);
    21. //总数
    22. groupFields.put("count", new BasicDBObject("$sum", 1));
    23. //求和
    24. groupFields.put("processTime_sum", new BasicDBObject("$sum","$processTime"));
    25. DBObject group = new BasicDBObject("$group", groupFields);
    26. AggregationOutput output = MongodbUtil.getLogInfoCollection().aggregate(match, project, group);

mongodb的高级操作(聚合框架)的更多相关文章

  1. SpringMVC整合Mongodb开发,高级操作

    开发环境: 操作系统:windows xpMongodb:2.0.6依 赖 包:Spring3.2.2 + spring-data-mongodb-1.3.0 + Spring-data-1.5 +  ...

  2. MongoDB之三(高级操作 聚合、游标)

    一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. <1> count count是最简单,最容易,也是最常用的聚合工 ...

  3. MongoDB三-高级操作

    复制来自:http://www.cnblogs.com/huangxincheng/archive/2012/02/21/2361205.html 今天跟大家分享一下mongodb中比较好玩的知识,主 ...

  4. mongodb数据库高级操作

    1.创建索引 2.索引名称 3.其他索引 4.explain 5.操作索引 6.高级特性 7.固定集合 8.导入导出 9.上锁 10.添加用户 11.主从复制

  5. MongoDB学习--高级查询 [聚合Group]

    Group大约需要一下几个参数. key:用来分组文档的字段.和keyf两者必须有一个 keyf:可以接受一个javascript函数.用来动态的确定分组文档的字段.和key两者必须有一个 initi ...

  6. mongodb高级操作及在Java企业级开发中的应用

    Java连接mongoDB Java连接MongoDB需要驱动包,个人所用包为mongo-2.10.0.jar.可以在网上下载最新版本. package org.dennisit.mongodb.st ...

  7. MongoDB高级操作

    参考MongoDB菜鸟教程 一.$type操作符 MongoDB 中可以使用的类型如下表所示: 类型 数字 备注 Double 1   String 2   Object 3   Array 4   ...

  8. 7.MongoDB系列之聚合框架

    1. 管道阶段和可调参数 聚合框架基于管道的概念.他由多个阶段组成,每个阶段都会提供一组按钮或可调参数.每个阶段对其输入执行不同的数据处理任务,并生成文档已作为输出传递到下一阶段. 2. 阶段常见操作 ...

  9. 基于Mongodb的轻量级领域驱动框架(序)

    混园子也有些年头了,从各个大牛那儿学了很多东西.技术这东西和中国的料理一样,其中技巧和经验,代代相传(这不是舌尖上的中国广告).转身回头一望,几年来自己也积累了一些东西,五花八门涉猎到各种方向,今日开 ...

随机推荐

  1. UIScrollView解决touchesBegan等方法不能触发的解方案

    新建一个类继承自UIScrollView  并重写下面的方法 -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [su ...

  2. Static File Middleware

    [ASP.NET Core] Static File Middleware   前言 本篇文章介绍ASP.NET Core里,用来处理静态档案的Middleware,为自己留个纪录也希望能帮助到有需要 ...

  3. ASP.NET异常:找到多个具有相同ID"xxx"的控件。FindControl要求控件具有唯一的ID

    出错场景是这样使用的: 1.FindControl遍历Page.Form.Controls,将其放到一个List里. 2.Page.Form.Controls.Clear(),清空所有控件 3.往Pa ...

  4. 深入研究java.lang.ProcessBuilder类

     深入研究java.lang.ProcessBuilder类 一.概述       ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它 ...

  5. C语言考试第一题详细过程

    1.计算 ,并输出其结果. 思路是先设计一个函数计算阶乘,再用循环,逐个求和. #include<stdio.h> int mul(int n) { int num,i; num=; ;i ...

  6. android viewpager change adapter ---在使用viewpager设置新的adapter的时候发现页面还是显示旧的adapter中的值

    有一个需求是当用户选择navigationview中的某一项时,右边的viewpager需要动态切换不同的adapter 发现直接setAdapter没有任何反应,加载的数据还是旧的数据 折腾了半天只 ...

  7. leetcode面试准备:Reverse Words in a String

    leetcode面试准备:Reverse Words in a String 1 题目 Given an input string, reverse the string word by word. ...

  8. 虚函数表以及RTTI阅读(阅后焚)

    http://blog.csdn.net/haoel/article/details/1948051/ http://www.cnblogs.com/ustc11wj/archive/2012/08/ ...

  9. 【DataStructure In Python】Python模拟栈和队列

    用Python模拟栈和队列主要是利用List,当然也可以使用collection的deque.以下内容为栈: #! /usr/bin/env python # DataStructure Stack ...

  10. Oracle系列之表空间

    涉及到表的处理请参看原表结构与数据  Oracle建表插数据等等 创建表空间等等 select tablespace_name from dba_tablespaces;--dba权限用户查询数据库中 ...