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中,只要增加一行,写成result A5即可向java输出resultset形式的结果,具体的代码参考esProc教程。同样,用java调用esProc访问MongoDB也必须将mongdb的java驱动包放到java程序的classpath中。
相关推荐
在Thinkphp中实现多条件查询时,可以使用框架提供的查询构建器(Query Builder),但是当涉及到MongoDB的复合查询时,比如需要使用AND和OR逻辑运算符进行多条件筛选,官方文档中提供的方法可能不足以满足需求。...
- **Spring Data MongoDB** 提供了事件机制,可以在数据访问过程中触发特定的事件,例如 `beforeSave`, `afterLoad` 等。 - 事件处理可以用来执行额外的逻辑,比如日志记录、数据验证等。 #### 十、异常处理 - **...
Spring Data MongoDB 提供了一组高级抽象,用于在Java 应用程序中操作MongoDB 数据。它包括Repository 模式,使得与MongoDB 的交互变得简单且类型安全。 3. **配置MongoDB** 在Spring Boot 应用中,可以通过...
在MongoDB中,增加数据通常涉及到向集合(类似SQL中的表)中插入文档(JSON格式的数据)。在C#中,我们可以使用`MongoDB.Driver`库来完成这个任务。例如: ```csharp using MongoDB.Driver; var client = new ...
MongoDB是一款分布式文档型数据库,以其灵活性、高性能和易扩展性在现代Web开发中占据了重要地位。MongoDB中文手册是开发者必备的参考资料,它详细介绍了MongoDB的各种操作和语法用法,帮助用户深入理解并有效利用这...
在本项目中,"express + MongoDB实现学生管理系统(mongoose)"是一个基于Node.js的Web应用程序,主要用于管理和存储学生数据。这个系统使用了Express框架作为后端开发工具,MongoDB作为数据库,以及Mongoose作为...
django+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理系统.zipdjango+mongodb+hui 实现的后台管理...
在MongoDB中实现树结构 一种使用一个MongoDB集合实现树结构的方法。 显示模式设计和CRUD概念的一些基本思想。 在示例代码中使用和 。 [警告] 根据我很少的经验,这只是一种实现树结构的方法。 这可能不是您情况下的...
在这个“基于MongoDB实现商品管理系统”的视频教程中,你将深入学习如何利用MongoDB构建一个完整的商品管理系统。 首先,从"001_mongodb的下载安装和测试.mp4"开始,视频会引导你进行MongoDB的下载、安装和基本功能...
在本文中,我们将使用java作为开发语言,并配合MongoDB数据库来存储和下载图片。java是一种广泛使用的编程语言,known for its platform independence和large community support。MongoDB是一种NoSQL数据库,known ...
MongoDB 3.6 中文文档
MongoDB在Java中被广泛用于构建高性能、可扩展的数据存储解决方案。MongoDB是一个NoSQL数据库,以其灵活性、可伸缩性和高性能而闻名。在Java中使用MongoDB,我们可以借助Spring Data MongoDB框架,它提供了一种简化...
基于node.js、vue、mongodb等技术构建的web系统,界面美观,功能齐全,适合用作毕业设计、课程设计作业等,项目均经过测试,可快速部署运行! 基于node.js、vue、mongodb等技术构建的web系统,界面美观,功能齐全,...
在本文中,我们将深入探讨如何利用MongoDB和Java来实现BOM表的多视图转换。 首先,理解BOM表的基本概念。BOM是制造业中用于描述产品结构的工具,它列出了一项产品所需的所有组件和子组件,以及它们的数量关系。在...
MongoDB是一种流行的开源、分布式、文档型数据库,它在处理大量数据时提供了高可用性和可扩展性。NoSQLBooster for MongoDB是一款强大的管理工具,专为优化MongoDB操作而设计,其前身为Mongobooster,是开发人员和...
数据存储使用 MongoDB 来实现, MongoDB 中存储了抓取的数据,并使用 GridFS 来存储大文件。 分布式爬虫的实现 分布式爬虫的实现主要包括三个部分:爬虫引擎、任务队列和数据存储。爬虫引擎使用 Scrapy 框架来抓取...
7. **安全和权限管理**:测试数据也可能涉及到用户角色和权限的设定,让你了解如何在MongoDB中实现安全性。 在使用这些测试数据时,你应该逐一实践每个操作,对比预期结果,理解MongoDB的工作原理。同时,你也可以...
在MongoDB中,这些操作通过简单的命令和API实现,例如`insertOne()`、`find()`、`updateOne()`和`deleteOne()`。 3. **查询语言**:MongoDB的查询语言(MQL)支持丰富的查询选项,包括条件查询、排序、分组和聚合,...
在实际开发中,这样的设计可以帮助开发者利用已有的JDBC经验快速上手MongoDB,并且通过自定义接口可以灵活地切换不同的MongoDB操作实现,比如更换不同版本的MongoDB驱动或者引入其他的MongoDB操作工具。 总结来说,...