当前位置: 首页 > news >正文

mongodb java group_在Java中实现MongoDB的Group功能

在非关系型数据库MongoDB中,并没有任何现成的框架可以像SQL那样通过Group By就轻松实现数据库的分组功能。如果我们想要实现MongoDB的Group功能,就必须写原生态的NO-SQL 查询语句来实现Group功能,这样既费时又费力,而且很容易出错,本文提供了一个封装的接口来实现MongoDB的Group功能,让程序员从此不再为MongoDB的Group而发愁。

接口方法如下:

/**

* keyColumn : new String[]{"xxxName","xxxType"}

* condition : 查询条件 ,可为空

* initial : 分组统计初始变量,为空时自动为每列提供初始变量

* reduce : 记录处理function

* finalize : finalize函数,可为空

*/

public BasicDBList group(String[] keyColumn, DBObject condition,

DBObject initial, String reduce, String finalize) {

DBCollection coll = getCollection();

DBObject key = new BasicDBObject();

for (int i = 0; i < keyColumn.length; i++) {

key.put(keyColumn[i], true);

}

condition = (condition == null) ? new BasicDBObject() : condition;

if (StringUtils.isEmpty(finalize)) {

finalize = null;

}

if (initial == null) {      //定义一些初始变量

initial = new BasicDBObject();

for (int i = 0; i < keyColumn.length; i++) {

DBObject index = new BasicDBObject();

index.put("count", 0);

index.put("sum", 0);

index.put("max", 0);

index.put("min", 0);

index.put("avg", 0);

index.put("self", "");

initial.put(keyColumn[i], index);

}

}

BasicDBList resultList = (BasicDBList) coll.group(key, condition,

initial, reduce, finalize);

return resultList;

}

实现案例:

//任务统计

@Action(value = "getTaskStatistic", results = { @Result(name = "success", type = "json", params = {

"includeProperties", "jsonResult" }) })

public String getTaskStatistic() {

DBObject initial = new BasicDBObject();

DBObject index = new BasicDBObject();

index.put("count", 0);

index.put("taskStatus", "");

initial.put("taskStatus", index);

String reduce = "function (doc, out) { "

+ " out.taskStatus.count = out.taskStatus.count+=1; "

+ " out.taskStatus.inspectStatus = doc.taskStatus;"

+ "}";

BasicDBList group = (BasicDBList) taskStatusService.group(new String[] { "taskStatus"}, null, initial, reduce, null);

this.jsonResult = group.toString();

return SUCCESS;

}

返回数据:

[ { "taskStatus" : { "count" : 4.0 , "taskStatus" : "Finished"}} , { "taskStatus" : { "count" : 3.0 , "taskStatus" : "Received"}} , { "taskStatus" : { "count" : 2.0 , "taskStatus" : "UnReceive"}}]

©著作权归作者所有:来自51CTO博客作者genuinecx的原创作品,如需转载,请注明出处,否则将追究法律责任

MongoDBMongoDB GourpNo-SQLNoSQL

相关文章:

  • java获取用户地理位置_Java获取用户访问IP及地理位置的方法详解
  • java 部署tomcat_JavaWeb之Tomcat的安装和部署
  • java dump heap_java程序性能分析之thread dump和heap dump
  • java main命令行参数_关于java的main主入口方法的args字符串数组参数如何使用及命令行模拟实现...
  • java友元类_C++友元(Friend)用法实例简介
  • java form array_Java中数组操作 java.util.Arrays 类常用方法的使用
  • java类名的作用_java下Class.forName的作用是什么,为什么要使用它?
  • Java同步问题_Java中的同步问题
  • ubuntu php 编译安装mysql_ubuntu 8.04 编译安装 php mysql apache
  • java 构造器 this_Java 类的构造器中this()和super()的困惑
  • java为什么输入else错误_java – 我遇到了一个错误问题,我正在使用“else if”语句....
  • java antlr sql_ANTLR SQL解析器代码
  • java cms gc_G1,CMS及PARALLEL GC的比较
  • java以class开头_JAVA基础:从.class文件中寻找类名
  • Java 习题6 参考答案及解析_java期末复习题答案及解析
  • Bootstrap JS插件Alert源码分析
  • input的行数自动增减
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript 一些 DOM 的知识点
  • Java新版本的开发已正式进入轨道,版本号18.3
  • JSONP原理
  • js学习笔记
  • PAT A1092
  • python学习笔记 - ThreadLocal
  • Python学习笔记 字符串拼接
  • 程序员最讨厌的9句话,你可有补充?
  • 创建一种深思熟虑的文化
  • 前端技术周刊 2019-01-14:客户端存储
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 做一名精致的JavaScripter 01:JavaScript简介
  • ​Spring Boot 分片上传文件
  • ​水经微图Web1.5.0版即将上线
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #大学#套接字
  • #每日一题合集#牛客JZ23-JZ33
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (分类)KNN算法- 参数调优
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (循环依赖问题)学习spring的第九天
  • (一)UDP基本编程步骤
  • (轉)JSON.stringify 语法实例讲解
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net 程序发生了一个不可捕获的异常
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET4.0并行计算技术基础(1)
  • .NET关于 跳过SSL中遇到的问题
  • .NET开发不可不知、不可不用的辅助类(一)
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .NET中两种OCR方式对比