MongoDB实现交叉汇总比较困难,如果将数据取出,用Java等高级语言来汇总的话,也相当复杂。因此,可以考虑用集算器esProc辅助MongoDB完成交叉汇总。下面我们通过一个例子来看一下具体做法。

Student集合如下:

db.student.insert  ( {school:'school1', sname : 'Sean' , sub1:4, sub2 :5 })

db.student.insert  ( {school:'school1', sname : 'chris' , sub1:4, sub2 :3 })

db.student.insert  ( {school:'school1', sname : 'becky' , sub1:5, sub2 :4 })

db.student.insert  ( {school:'school1', sname : 'sam' , sub1: 5,sub2 :4 })

db.student.insert  ( {school:'school2', sname : 'dustin' , sub1:2, sub2 :2 })

db.student.insert  ( {school:'school2', sname : 'greg' , sub1:3, sub2 :4 })

db.student.insert  ( {school:'school2', sname : 'peter' , sub1:5, sub2 :1 })

db.student.insert  ( {school:'school2', sname : 'brad' , sub1:2, sub2 :2 })

db.student.insert  ( {school:'school2', sname : 'liz' , sub1: 3,sub2 :null })

希望能够统计出如下的交叉表:每行一个学校,第一列是sub1成绩为5的人数,第二例是sub1成绩为4的人数,以此类推。

集算器的脚本如下:

A1: 连接MongoDB数据库,ip和端口号是localhost:27017,数据库是test,用户名和密码都是test。

A2: 使用find函数从MongoDB中取出集合student,形成游标。esProc在find函数中采用了和mongdb的find语句一样的参数格式。esProc的游标是分批读取和处理数据,可以避免数据量过大,内存出现溢出的情况。这里数据量不大,所以用fetch函数一次取出。

A3:首先按照学校分组。

A4:学校分组之后,每组内部按照[1,2,3,4,5]的序列对齐分组,再求每一个对齐分组的长度。

A5:对A4的长度数按照需求放入相应的位置,生成结果排列。

结果如下:

需要说明的是:集算器esProc并不包含MongoDB的java驱动包。用esProc来访问MongoDB,必须提前将MongoDB的java驱动包(要求2.12.2或以上版,如mongo-java-driver-2.12.2.jar)放到[esProc安装目录]\common\jdbc中。

集算器esProc协助MongoDB计算的脚本很容易集成到java中,只要增加一行,写成resultA5即可向java输出resultset形式的结果,具体的代码参考esProc教程。同样,用java调用esProc访问MongoDB也必须将mongdb的java驱动包放到java程序的classpath中。

转载于:https://blog.51cto.com/report5/1630044

集算器协助MongoDB计算之交叉汇总相关推荐

  1. 集算器协助Java处理结构化文本之条件过滤

    直接用Java实现文本文件中数据按条件过滤会有如下的麻烦: 1.文件不是数据库,不能用SQL访问.当过滤条件变化时需要改写代码.如果要实现象SQL那样灵活的条件过滤,则需要自己实现动态表达式解析和求值 ...

  2. java跨库join方案_集算器协助java处理多样性数据源之跨库关联

    Java的数据计算类库RowSet提供了JoinRowSet和FilteredRowSet类,可以进行跨库的关联计算,但是有很多局限.首先,JoinRowSet只支持inner join,不支持out ...

  3. 集算器协助SQL实现非等值分组

    SQL通常只能按源表字段进行分组,如果分组依据来自另一张表.外部参数.条件列表,用SQL就很繁琐.有时分组依据需要动态生成,这些往往要借助高级语言实现.有时分组依据和源表不完全对应(或区间没有交集), ...

  4. 协助 MongoDB 计算之本地化排序

    软件本地化,可让用户根据自己的语言环境.使用习惯来选择不同的语言版本,从而最大限度提高使用体验.随着软件技术的进步,本地化能力得到广泛支持.不断向前发展,也成为软件成熟的重要标志.本文讨论的Mongo ...

  5. oracle测试报告模板,Oracle与集算器对照测试报告

    1.测试目的 针对相同的硬件环境和计算任务,对比Oracle和集算器的性能差异,为客户选型提供参考. 2.硬件环境 设备数量:1台 CPU:16核Intel(R) Xeon(R) CPU E5620  ...

  6. 用R和集算器计算连续上涨5天的股票

    目标:通过日交易数据,从多只蓝筹股中选出连续上涨5天的股票. 思路:导入数据:过滤出上个月的数据:按照股票代码分组:将数据按日期排序:计算出每天比上一天的收盘价的增长额:计算出连续正增长的天数:过滤出 ...

  7. 集算器并行处理大文本文件的示例

    集算器可以方便地用并行方式处理大文本文件,下面通过一个例子来说明使用方法. 假设有个一千万条销售记录的文本文件sales.txt,其主要字段是SellerID(销售员).OrderDate(订单日期) ...

  8. 集算器访问HTTP数据的代码示例

    使用集算器(esProc)可以很方便的从http数据源读取数据进行处理. 本例子中有一个servlet,对外提供json格式的雇员信息查询.Servlet访问数据库的员工表,保存了员工的信息,如下: ...

  9. 10 行代码,集算器实现写诗机器人

    集算器不仅有大数据计算,还有诗和远方.最近看到不少写诗机器人的新闻,于是尝试用集算器简单地实现一个.这个实现真的很简单,简单到只有10几行代码,请看实现步骤: 1.下载字典和诗词 从网上找一个用于分词 ...

最新文章

  1. 中山大学提出SimAM:无参Attention!助力分类/检测/分割涨点!
  2. BBScan:信息泄漏批量扫描脚本
  3. Python库大全(涵盖了Python应用的方方面面),建议收藏留用!
  4. OpenShift Security (2) - 安装 Red Hat Advanced Cluster Security(RHACS)
  5. struct 和typedef struct的区别
  6. 重磅!李航《统计学习方法》最新资源,笔记、Python 代码一应俱全!
  7. 今天,启动MySQL服务器失败,
  8. Hadoop简单安装配置
  9. 通用PHM集成开发环境PIDE
  10. 在virtualbox安装xp系统及安装oracle
  11. def demo什么意思python_你知道Python的所有入门级知识吗?,这些,都,会,了
  12. 游戏引擎平面折线和直线路径跟随算法
  13. CodeWarrior IDE烧写介绍
  14. 华尔街不是中国的机会
  15. 龙尚3G模块在arm板上的应用
  16. c语言等级分制度的作用,使用C语言怎么对学生的成绩等级进行划分
  17. pdcp层的作用_LTE系统中PDCP子层功能研究
  18. Java分布式跟踪系统Zipkin(五):Brave源码分析-Brave和SpringMVC整合
  19. JS判断手机是否是iOS或者Android
  20. 中国慕课c语言入门视频,程序设计入门——C语言

热门文章

  1. 实体类在set字段时报空指针异常
  2. 前端后端分离,怎么解决SEO优化的问题呢?
  3. linux关闭的时候出现异常: java.net.ConnectException: 拒绝连接 (Connection refused)
  4. .NET Core,.NET Framework和Xamarin有什么区别?
  5. UITableView单元格选择颜色?
  6. 如何检查字符串“ StartsWith”是否为另一个字符串?
  7. 如何计算列表项的出现?
  8. 微软Windows 11正式发布!(附安装教程)
  9. 仿制波形驱动机器人- SAW
  10. JSP 九大内置对象及作用域(源码刨析,建议收藏)