mongdb高级操作(group by )
首先介绍哈方法
/** * 利用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 )的更多相关文章
- MySQL之高级操作
新增数据: 基本语法: insert into 表名 [(字段列表)] values(列表值) 在数据插入的时候,假设主键对应的值已经存在,插入一定会失败 主键冲突: 当主键存在冲突的时候(Dupl ...
- [Session] SessionHelper2---C#关于Session高级操作帮助类 (转载)
点击下载 SessionHelper2.rar 这个类是关于Session的一些高级操作1.添加时限制时间2.读取对象3.读取数据等等看下面代码吧 /// <summary> /// 联系 ...
- cassandra高级操作之索引、排序以及分页
本次就给大家讲讲cassandra的高级操作:索引.排序和分页:处于性能的考虑,cassandra对这些支持都比较简单,所以我们不能希望cassandra完全适用于我们的逻辑,而是应该将我们的逻辑设计 ...
- MySQL学习笔记_9_MySQL高级操作(上)
MySQL高级操作(上) 一.MySQL表复制 create table t2 like t1; #复制表结构,t2可以学习到t1所有的表结构 insert into t2 ...
- MySQL学习笔记_10_MySQL高级操作(下)
MySQL高级操作(下) 五.MySQL预处理语句 1.设置预处理stmt,传递一个数据作为where的判断条件 prepare stmt from "select * from table ...
- python列表(list)的使用技巧及高级操作
python列表(list)的使用技巧及高级操作置顶 2018年03月25日 13:39:41 顽劣的石头 阅读数:5478 标签: python extend bisect list enumera ...
- C语言指针的高级操作
C语言指针的高级操作 指针 指针 在上篇博客中我介绍了C语言指针的最基本操作,那么我在这篇博客中会介绍一下C语言指针的一些骚操作. 指向指针的指针 这名字乍一听有点拗口,再次一听就更加拗口了.先看定 ...
- django之创建第8-3个项目-数据库数据提取之高级操作
1.配置test2.html <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- SpringMVC整合Mongodb开发,高级操作
开发环境: 操作系统:windows xpMongodb:2.0.6依 赖 包:Spring3.2.2 + spring-data-mongodb-1.3.0 + Spring-data-1.5 + ...
随机推荐
- iOS开发 AFNetworking 3.0使用遇到的问题
前段时间写了一个iOS开发之AFNetworking 3.0.4使用这篇文章,是基本的用法,昨天在使用的时候又出现了几个问题,特地俩记录下,希望能帮到大家! 问题一 我是做一个获取手机验证码的功能,进 ...
- delphi xe5 android listbox的 TMetropolisUIListBoxItem
listbox实现以下效果: \ 关键代码,采用数据集的方式 type PpatientData=^RpatientData; RpatientData= record patient_id:stri ...
- csdn搜索技巧
由于CSDN下载资源高级搜索,只能显示10页分页,所以我们换种方法去搜索csdn的资源. 第10页以后没了. 在百度框里面输入如下: jquery site:download.csdn.net 图:
- PHP正则匹配title标题文本
//////////////////////////////////////////////////////////////////////////////////////////////////// ...
- ANDROID_MARS学习笔记_S02_004_ExpandableListActivity
1.main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x ...
- Ubuntu zookeeper-3.5.0-alpha启动错误 zkEnv.sh: Syntax error: "(" unexpected (expecting "fi")(转)
昨天小猿我把Ubuntu Server64位上的 zookeeper换成了最新版本的,结果启动的时候出错:之前zookeeper-3.3.6是没有任何问题的,换成了zookeeper3.5出现了下面的 ...
- HDU 4288 Coder 【线段树+离线处理+离散化】
题意略. 离线处理,离散化.然后就是简单的线段树了.需要根据mod 5的值来维护.具体看代码了. /* 线段树+离散化+离线处理 */ #include <cstdio> #include ...
- Form.KeyPreview 属性
Form.KeyPreview 属性 今天再做KeyDown 和 KeyUp 事件时,就是忘了设置,窗体的KeyPreview 属性,所以KeyDown 和 KeyUp 事件没有反应(这里说明一下,本 ...
- C#中IDisposable学习
在Net中,由GC垃圾回收线程掌握对象资源的释放,程序员无法掌控析构函数的调用时机.对于一些非托管资源,比如数据库链接对象等,需要实现IDisposable接口进行手动的垃圾回收.那么什么时候使用Id ...
- 从头开始编写一个Orchard网上商店模块(3) - 创建Orchard.Webshop模块项目
原文地址:http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-par ...