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个参考文档,特别是官网的
例子
- // 首先利$match筛选出where条件
- BasicDBObject[] array = {
- new BasicDBObject("startTimeLong", new BasicDBObject("$gte",beginTime)),
- new BasicDBObject("startTimeLong", new BasicDBObject("$lt",endTime)) };
- BasicDBObject cond = new BasicDBObject();
- cond.put("$and", array);
- DBObject match = new BasicDBObject("$match", cond);
- // 利用$project拼装group需要的数据,包含optCode列、processTime列
- DBObject fields = new BasicDBObject("optCode", 1); // 接口
- fields.put("processTime", 1);// 耗时
- fields.put("provinceCode", 1);// 省份
- fields.put("channelSubCode", 1);// 渠道
- fields.put("platFormCode", 1);// 平台
- DBObject project = new BasicDBObject("$project", fields);
- // 利用$group进行分组
- DBObject _group = new BasicDBObject("provinceCode", "$provinceCode");
- _group.put("channelSubCode", "$channelSubCode");
- _group.put("platFormCode", "$platFormCode");
- _group.put("optCode", "$optCode");
- DBObject groupFields = new BasicDBObject("_id", _group);
- //总数
- groupFields.put("count", new BasicDBObject("$sum", 1));
- //求和
- groupFields.put("processTime_sum", new BasicDBObject("$sum","$processTime"));
- DBObject group = new BasicDBObject("$group", groupFields);
- AggregationOutput output = MongodbUtil.getLogInfoCollection().aggregate(match, project, group);
mongodb的高级操作(聚合框架)的更多相关文章
- SpringMVC整合Mongodb开发,高级操作
开发环境: 操作系统:windows xpMongodb:2.0.6依 赖 包:Spring3.2.2 + spring-data-mongodb-1.3.0 + Spring-data-1.5 + ...
- MongoDB之三(高级操作 聚合、游标)
一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. <1> count count是最简单,最容易,也是最常用的聚合工 ...
- MongoDB三-高级操作
复制来自:http://www.cnblogs.com/huangxincheng/archive/2012/02/21/2361205.html 今天跟大家分享一下mongodb中比较好玩的知识,主 ...
- mongodb数据库高级操作
1.创建索引 2.索引名称 3.其他索引 4.explain 5.操作索引 6.高级特性 7.固定集合 8.导入导出 9.上锁 10.添加用户 11.主从复制
- MongoDB学习--高级查询 [聚合Group]
Group大约需要一下几个参数. key:用来分组文档的字段.和keyf两者必须有一个 keyf:可以接受一个javascript函数.用来动态的确定分组文档的字段.和key两者必须有一个 initi ...
- mongodb高级操作及在Java企业级开发中的应用
Java连接mongoDB Java连接MongoDB需要驱动包,个人所用包为mongo-2.10.0.jar.可以在网上下载最新版本. package org.dennisit.mongodb.st ...
- MongoDB高级操作
参考MongoDB菜鸟教程 一.$type操作符 MongoDB 中可以使用的类型如下表所示: 类型 数字 备注 Double 1 String 2 Object 3 Array 4 ...
- 7.MongoDB系列之聚合框架
1. 管道阶段和可调参数 聚合框架基于管道的概念.他由多个阶段组成,每个阶段都会提供一组按钮或可调参数.每个阶段对其输入执行不同的数据处理任务,并生成文档已作为输出传递到下一阶段. 2. 阶段常见操作 ...
- 基于Mongodb的轻量级领域驱动框架(序)
混园子也有些年头了,从各个大牛那儿学了很多东西.技术这东西和中国的料理一样,其中技巧和经验,代代相传(这不是舌尖上的中国广告).转身回头一望,几年来自己也积累了一些东西,五花八门涉猎到各种方向,今日开 ...
随机推荐
- UIScrollView解决touchesBegan等方法不能触发的解方案
新建一个类继承自UIScrollView 并重写下面的方法 -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [su ...
- Static File Middleware
[ASP.NET Core] Static File Middleware 前言 本篇文章介绍ASP.NET Core里,用来处理静态档案的Middleware,为自己留个纪录也希望能帮助到有需要 ...
- ASP.NET异常:找到多个具有相同ID"xxx"的控件。FindControl要求控件具有唯一的ID
出错场景是这样使用的: 1.FindControl遍历Page.Form.Controls,将其放到一个List里. 2.Page.Form.Controls.Clear(),清空所有控件 3.往Pa ...
- 深入研究java.lang.ProcessBuilder类
深入研究java.lang.ProcessBuilder类 一.概述 ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它 ...
- C语言考试第一题详细过程
1.计算 ,并输出其结果. 思路是先设计一个函数计算阶乘,再用循环,逐个求和. #include<stdio.h> int mul(int n) { int num,i; num=; ;i ...
- android viewpager change adapter ---在使用viewpager设置新的adapter的时候发现页面还是显示旧的adapter中的值
有一个需求是当用户选择navigationview中的某一项时,右边的viewpager需要动态切换不同的adapter 发现直接setAdapter没有任何反应,加载的数据还是旧的数据 折腾了半天只 ...
- leetcode面试准备:Reverse Words in a String
leetcode面试准备:Reverse Words in a String 1 题目 Given an input string, reverse the string word by word. ...
- 虚函数表以及RTTI阅读(阅后焚)
http://blog.csdn.net/haoel/article/details/1948051/ http://www.cnblogs.com/ustc11wj/archive/2012/08/ ...
- 【DataStructure In Python】Python模拟栈和队列
用Python模拟栈和队列主要是利用List,当然也可以使用collection的deque.以下内容为栈: #! /usr/bin/env python # DataStructure Stack ...
- Oracle系列之表空间
涉及到表的处理请参看原表结构与数据 Oracle建表插数据等等 创建表空间等等 select tablespace_name from dba_tablespaces;--dba权限用户查询数据库中 ...