首先介绍哈方法

/** * 利用java驱动自带函数分组查询 *

@param key 用来分组文档的字段 【group by key】 *

@param cond 执行过滤的条件 【where name=? and age=?】 *

@param initial reduce中使用变量的初始化 * @param reduce reduce(参数:当前文档和累加器文档.) *

@param fn 结束后执行函数 *

@return */

参考例子1:

group(DBObject key,DBObject cond,DBObject initial,String reduce,String fn ){

//key:用来分组文档的字段。和keyf两者必须有一个 [类似于group by]

BasicDBObject key = new BasicDBObject(); key.put("optCode", true);

//执行过滤的条件 [类似于where]

BasicDBObject[] array={ new BasicDBObject("startTimeLong",

new BasicDBObject("$gte", startTime)),

new BasicDBObject("startTimeLong", new BasicDBObject("$lte", endTime)) };

BasicDBObject cond = new BasicDBObject(); //cond.put("$and",array);

//initial:reduce中使用变量的初始化

BasicDBObject initial = new BasicDBObject();

initial.append("count", 0);

//reduce(当前文档和累加器文档.)

String reduce = "function(doc, aggr){" + " aggr.count += 1;" + " }";

String fn = null;

dao.group(key, cond, initial, reduce, fn);

}

参考例子2:

//求总数和平局数

public Double findAverage(String sumField, String groupField, BasicDBObject where)

{

// 分组项字段 【group by groupField】

DBObject key = new BasicDBObject(groupField, null)

// 结果数据计数器 【select avg,rsdata.sum,rsdata.count 】

BasicDBObject counter = new BasicDBObject();

DBObject index = new BasicDBObject();

index.put("count", 0);

index.put("sum", 0);

counter.put("rsdata", index);counter.put("avg", 0);}

// reduce处理函数

String procFunction = "function(doc,aggr){" + "aggr.rsdata.sum+=parseFloat(doc." + sumField + ");" + "aggr.rsdata.count+=1;" + "}";

// 结果处理函数

String finallyFunction = "function(doc){" + "doc.avg=doc.rsdata.sum/doc.rsdata.count;" + "}";

BasicDBList rs = (BasicDBList) getCollection().group(key, where, counter, procFunction, finallyFunction);

if (null != rs && rs.size() > 0)

{BasicDBObject data = (BasicDBObject) rs.get(0);

return Double.parseDouble(data.get("avg").toString());} return 0.0;

}

mongdb高级操作(group by )的更多相关文章

  1. MySQL之高级操作

     新增数据: 基本语法: insert into 表名 [(字段列表)] values(列表值) 在数据插入的时候,假设主键对应的值已经存在,插入一定会失败 主键冲突: 当主键存在冲突的时候(Dupl ...

  2. [Session] SessionHelper2---C#关于Session高级操作帮助类 (转载)

    点击下载 SessionHelper2.rar 这个类是关于Session的一些高级操作1.添加时限制时间2.读取对象3.读取数据等等看下面代码吧 /// <summary> /// 联系 ...

  3. cassandra高级操作之索引、排序以及分页

    本次就给大家讲讲cassandra的高级操作:索引.排序和分页:处于性能的考虑,cassandra对这些支持都比较简单,所以我们不能希望cassandra完全适用于我们的逻辑,而是应该将我们的逻辑设计 ...

  4. MySQL学习笔记_9_MySQL高级操作(上)

    MySQL高级操作(上) 一.MySQL表复制 create table t2 like t1;               #复制表结构,t2可以学习到t1所有的表结构 insert into t2 ...

  5. MySQL学习笔记_10_MySQL高级操作(下)

    MySQL高级操作(下) 五.MySQL预处理语句 1.设置预处理stmt,传递一个数据作为where的判断条件 prepare stmt from "select * from table ...

  6. python列表(list)的使用技巧及高级操作

    python列表(list)的使用技巧及高级操作置顶 2018年03月25日 13:39:41 顽劣的石头 阅读数:5478 标签: python extend bisect list enumera ...

  7. C语言指针的高级操作

    C语言指针的高级操作 指针  指针 在上篇博客中我介绍了C语言指针的最基本操作,那么我在这篇博客中会介绍一下C语言指针的一些骚操作. 指向指针的指针 这名字乍一听有点拗口,再次一听就更加拗口了.先看定 ...

  8. django之创建第8-3个项目-数据库数据提取之高级操作

    1.配置test2.html <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

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

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

随机推荐

  1. VC项目配置基础以及快捷键(收藏)

    来自http://blog.csdn.net/phunxm/article/details/5082488 一.IDE基础配置 1.字体 VC6中“Tools→Options→Format→Font” ...

  2. Servlet实现文件上传

    一.Servlet实现文件上传,需要添加第三方提供的jar包 下载地址: 1) commons-fileupload-1.2.2-bin.zip      :   点击打开链接 2) commons- ...

  3. VMWare虚拟机系统网络配置

  4. HDU4530+模拟

    /* */ #include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorith ...

  5. Android ListView(Selector 背景图片)

    listview0.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmln ...

  6. SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-002-AOP术语解析

    一. 1.Advice Advice是切面的要做的操作,它定义了what.when(什么时候要做什么事) aspects have a purpose—a job they’re meant to d ...

  7. 【Linux安全】防止 root 用户远程登录

    防止 root 用户远程登录,在终端输入以下命令: vim /etc/ssh/sshd_config 修改如下行为:no PermitRootLogin no 如图所示:

  8. /etc/passwd 结构

    命令:cat /etc/passwd username:password:uid:gid:allname:homedir:shell 用户名:密码:用户ID:组ID:用户全名:主目录:登录shell ...

  9. javascript小游戏--生命游戏

    昨天参加Code Retreat的活动,"Code Retreat是一个一天的集中练习的活动,专注于软件开发和设计的基础". 要了解更多信息可前往 CodeRetreat官网 通过 ...

  10. Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?

    0.写在前面 本文涉及到屏幕密度的讨论,这里先要搞清楚 DisplayMetrics 的两个变量,摘录官方文档的解释: density:The logical density of the displ ...