MongoDB 属于 NoSql 中的基于分布式文件存储的文档型数据库,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。Mongo 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,但是由于其属于 nosql 型,所以很难想普通数据库那样通过 jdbc 连接,通过 sql 取数,下面介绍下,如何在润乾报表中连接 mongodb 并从中取数。
针对于一些特殊数据库(不能用 jdbc 或者 odbc 连接),润乾开发了外部库功能,对一些特殊数据库功能进行了封装,直接使用封装后的函数就可以实现特殊数据库的连接、读取、计算等功能,要想使用外部库功能,需要集算器或者脚本数据集的支持。
集算器中连接方法:
集算器中设置外部库可以参考文档(如不需要集算器直接使用报表,此处可略过):
集算器外部库指南:(http://c.raqsoft.com.cn/article/1532597958129)
外部库 jar 包下载地址:(http://c.raqsoft.com.cn/article/1532597958129)
具体使用见文档中即可,比如现在 mongodb 中有张数据表(集合)student,里边数据为:
在集算器中写脚本:
A1:=mongo_open(“mongodb://127.0.0.1:27017/test”) 连接 test 数据库,用户名和密码为空
A2:=mongo_shell(A1,“student.find()”).fetch() 从 student 中取数,也可以实现 count、distinct 和 aggregate 操作
这样,A2 单元格就能够从 student 表中取出数据。
将这个脚本保存成 dfx 文件,在报表中可以增加一个集算器数据集,用这个 dfx 文件做为数据集就行。
润乾报表连接方法:
在一些项目中,需求比较简单,可能并不需要集算器,那么可以使用润乾报表的脚本数据集,下面介绍下,在润乾报表中如何通过脚本数据集连接 mongodb 数据库。
1、下载需要的外部库包,下载地址为:(http://c.raqsoft.com.cn/article/1532597958129)
并解压,比如放到:G:\extlib,下边子目录为各个不同的数据库目录,然后下载 mongo-java-driver-3.6.3.jar,具体版本号可以根据数据库版本来确定,下载后放到 G:\extlib\MongodbCli 中,在这个目录中有个 mongoCli.jar,这个是润乾针对 mongodb 开发的外部库的 jar 包。
2、启动报表设计器,在工具栏中选择 工具——选项,找到集算器选项标签,在外部库目中选择步骤 1 中的 G:\extlib,并且勾中 MongodbCli,如图:
如果还需要其他外部库,在这里选中就行,点击确定,然后重启设计器
3、新建报表,新建数据集时选择脚本数据集,在脚本数据集中写入:
A1:=mongo_open连接 test 数据库,用户名和密码为空
A2:=mongo_shell(A1,“student.find()”).fetch() 从 student 中取数,也可以实现 count、distinct 和 aggregate 操作
点击确定,这样就可以基于这个脚本数据集设计报表,设计模板如下:
预览结果:
参数过滤
实际应用中,通常要传入参数对数据进行过滤,下面已年龄为例,看下如果通过参数对数据进行过滤。
在报表中增加参数:age,数据类型为整数:
现在要查询 student 表中年龄大于传入参数的数据,那么更改脚本数据集的 A2 单元格为:
=mongo_shell(A1,“student.find({\“age\”:{$gt:”+string(age)+“}})”).fetch()
这里用的是大于,等于有其他写法,具体可以百度下。
这样的话,设计器下报表就能够通过脚本数据集从 mongodb 数据库中取数,并且能够对数据进行过滤。
现在的外部库配置,是通过 工具——选项,外部库的设置中配置的,如果报表需要部署到 web 服务器上发布,那么还需要在润乾的配置文件中设置外部库的配置:
打开 WEB-INF 下的 raqsoftConfig.xml, 找到…… 节点,在这个节点内增加:
<extLibsPath>G:\\extlib</extLibsPath> <importLibs> <lib>MongodbCli</lib> </importLibs>
<extLibsPath>G:\\extlib</extLibsPath> <importLibs> <lib>MongodbCli</lib> </importLibs>
注:extLibsPath 标签设置外部库的根目录
importLibs 设置外部库中对应数据库的 jar 存放目录。
常见问题:
设置完脚本数据集,预览报表时,通常会报错:无法识别的表达式 mongo_open()
解决办法:
1、查看外部库设置是否正常
2、现在 mongodb 通常为 64 位,并且润乾的 mongoCli.jar 也是基于高版本的 jdk 编译,所以检查报表安装时的 jdk 版本,设计器自带的是 1.6,建议安装时选择本机高版本的 jdk
这样,润乾报表就可以连接 mongodb 数据库,并且从中取数数据进行展示。当然,集算器脚本中还提供了 mongodb 的更多计算方法