1. 概述
1.1 版本
报表服务器版本 | JAR 包版本 | 插件版本 |
---|---|---|
10.0 | 2018-11-30 | V9.4.8 |
9.0 | 2019-02-26 | V9.4.7 |
8.0 | 2019-02-26 | V9.4.7 |
1.2 应用场景
MongoDB 作为一款非常流行的 NoSQL 数据库,越来越被广泛地使用,但是帆软报表中 JDBC 和 JNDI 都无法连接 MongoDB 进行取数,安装该插件可以连接 MongoDB 数据库。
有关 MongoDB 的介绍和使用方法可以参阅MongoDB官方帮助文档的说明。
1.3 功能介绍
设计器菜单栏服务器>定义数据连接处会新增MongoDB类型的数据连接方式。
定义好数据连接后,数据集管理面板处新增MongoDB明细数据集和MongoDB聚合数据集。
注:目前只支持在设计器中定义 MongoDB 数据连接,不支持在决策平台进行连接。
2. 操作步骤
2.1 安装插件
点击下载插件:mongodb数据库
设计器插件安装方法参照:设计器插件管理
服务器安装插件方法参照:服务器插件管理
2.2 定义数据连接
插件安装后,点击设计器菜单栏服务器>定义数据连接,新建一个MongoDB类型的数据连接,根据实际场景填写数据库连接信息,点击测试连接,弹出连接成功对话框后,点击确定保存即可。
2.3 添加 MongoDB 明细数据集
左下角数据集管理面板处添加一个MongoDB明细数据集,打开数据库查询面板,填写相关查询信息后,即可预览到 MongoDB 数据库表中的数据。
下面以示例分别说明如何查询 MongoDB 中简单型数据、数组型数据、对象型数据这三种不同的数据类型。
1)简单型数据
以查询 MongoDB 数据库 test 中的表 jaindanxing 为例,该表中的数据如下图所示:
新建 MongoDB 明细数据集mongo1,如下图填写数据库查询信息。
注:简单型数据没有维度可以不用填写,查询条件、过滤条件、排序条件根据需求填写。
点击数据库查询面板的预览按钮,结果如下图所示:
2)数组型数据
MongoDB 是文档型数据库,每个文档( doc )表示一条数据记录。相比于关系型数据库的行记录 row 只能使用简单型数据,doc 能够使用复杂的数组型数据,可以将 doc 内嵌到数组中。
MongoDB 的数组是一系列元素的集合,使用中括号 [] 表示数组,例如:[1,2,3] 中的元素是整数值,[{name:"t5"}, {name:"t7"}],[ {name:"t5", age:21}, {name:"t7", age:22} ]中的元素是 doc。
以查询 MongoDB 数据库 test 中的表 shuzuxing 为例,该表中的数据如下图所示:
新建 MongoDB 明细数据集mongo2,不填写任何查询信息,直接查出该表中的所有数据。
点击数据库查询面板的预览按钮,结果如下图所示:
3)对象型数据
以查询 MongoDB 数据库 test 中的表 duixiangxing 为例,该表中的数据如下图所示:
新建 MongoDB 明细数据集mongo3,不填写任何查询信息,直接查出该表中的所有数据。
点击数据库查询面板的预览按钮,结果如下图所示:
也可以根据维度来展示数据,如下图填写好维度信息,根据维度筛选数据。
点击数据库查询面板的预览按钮,结果如下图所示:
2.4 添加 MongoDB 聚合数据集
1)左下角数据集管理面板处添加一个MongoDB明细数据集,打开数据库查询面板,填写相关查询信息后,即可预览到 MongoDB 数据库表中的数据。
注:仅 V9.0 及之后版本支持聚合数据集
2)以查询 MongoDB 数据库 test 中的表 juhe 为例,该表中的数据如下图所示:
新建 MongoDB 明细数据集mongo4,数据库查询面板下拉选择聚合操作符,填写相应的值。
注:这里是根据作者计算他所写的文章数。
点击数据库查询面板的预览按钮,结果如下图所示:
3. 注意事项
3.1 ISO 标准时间格式
在 MongoDB 中时间要转换为 ISO 标准格式,如下图所示,查询日志中 2017-2-17 以前的记录:
3.2 时间查询的时区问题
1)问题描述
查询 MongoDB 数据库表中的时间时,有时会出现设计器和 shell 工具查询出来结果不一致的问题。
例如下图所示的查询语句:
设计器中查询出的结果:
shell 工具查询出的结果:
2)原因分析
用户录入时间数据的语句为:"REAL_SEND_DATETIME" : ISODate("2019-08-31T12:50:11.000Z"),该语句使用 ISODate() 函数插入了 GMT 时间,设计器查到的数据转换为本地时间会加上8个小时,这就导致了数据和查询差异。
3)解决方案
录入数据时使用了 GMT 时间,设计器中查询时使用'REAL_SEND_DATETIME': {$gt: ISODate('2019-01-01T00:00:00.000Z')}就可以得到正确的结果了,但是展示时候会转换为本机的时间。
注:有关 MongoDB 中日期格式的使用可以查看官方文档的介绍:Date()