1 概述
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。Mysql在大数据量时效率显著下降,MongoDB更多时候作为关系数据库的一种替代。
MongoDB是一个面向集合的,模式自由的文档型数据库。
MongoDB支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询JSON数据,能存储海量数据,但是不支持事务。
MongoDB 一般适用于这些场景:数据不是特别重要(例如:通知,推送等),数据表结构变化较为频繁,数据量特别大,数据的并发性特别高,数据结构比较特别(例如:地图的位置坐标)。
2 实例
我们以公司录入的员工登记信息为例,使用MongoDB数据库制作报表来展示员工的基本信息、工作经历、学习经历以及奖惩。
运行效果如下图:
3 制作过程
3.1 定义MongoDB连接
实例制作的第一步就是登录设计器定义MongoDB连接,与MongoDB服务器建立连接,从而达到获取MongoDB服务器中定义的业务数据的目的。
通过主菜单中“数据”菜单下的“数据连接配置”进入数据连接管理界面,右键点击“数据连接”节点,新建一个MongoDB连接:
新建MongoDB连接时,一般只需配置数据库设置tab中的服务器地址、端口、数据库名、用户名和密码即可。如下图:
认证类型:服务器用户验证方式,支持的认证方式包括:GSSAPI、PLAIN、MONGODB-X509、MONGODB-CR、SCRAM-SHA-1。
配置完成之后,点击测试连接,连接成功即可使用该数据库中的数据了。
3.2 准备业务数据
使用MongoDB客户端为实例的制作准备好业务数据,如下图:
3.3 创建MongoDB数据
“数据”根目录或子目录右键执行“新建数据视图–》MongoDB数据”菜单,创建一个MongoDB数据,为报表的制作提供数据源。
创建MongoDB数据时,选择创建好的MongoDB类型数据连接和对应的表名,使用默认的非聚合查询模式,点击“查看原始数据”即可预览到 MongoDB 数据库表中全部的原始数据了。
实例中需要通过员工姓名进行数据的过滤,所以,我们需要在查询条件中添加过滤条件,定义一个参数且为其设置默认值,设置如下图:
查询条件相当于操作符“match”,主要用于条件的过滤。
字段筛选相当于操作符“project”,主要用于字段排除和字段的选择。例如:输入{native_place:0},表示排除“native_place”字段。
排序条件相当于操作符“sort”,主要用于限制数据的显示顺序,例如:输入{entry_time:1},表示数据按照“entry_time”升序显示。
如果需要对原始数据进行复杂一些的查询,可以采用“聚合查询模式”,这种模式支持的操作符更丰富,可以满足用户更多的需求。如下图:
操作符说明如下:
操作符 | 说明 |
---|---|
$match | 用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。 |
$group | 将集合中的文档分组,可用于统计结果。 |
$project | 修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。 |
$limit | 用来限制MongoDB聚合管道返回的文档数。 |
$skip | 在聚合管道中跳过指定数量的文档,并返回余下的文档。 |
$sort | 将输入文档排序后输出。 |
$unwind | 将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。 |
点击“执行”,由于过滤条件中定义了参数,则先弹出参数设置界面,如下图:
点击“下一步”即可查看符合条件的二维数据结果,数组会自动扩展。如下图:
配置完成之后保存MongoDB数据即可。
3.4 使用MongoDB数据制作报表
新建一个普通报表,第一步:画好员工登记信息报表的表样,如下图:
第二步:将创建好的MongoDB数据拉入数据源中,此处会显示我们在MongoDB数据中定义的参数:
第三步:将MongoDB数据中的字段添加到员工登记信息报表的对应单元格中,进行相关的设置,如下图:
到此,员工登记信息报表就完成了,执行报表时用户可以通过姓名进行模糊搜索。
4 总结
1)MongoDB数据支持两种查询模式:普通查询和聚合查询;
2)MongoDB数据中定义的自定义变量必须设置默认值;
3)MongoDB 作为数据源时参数不允许禁用;
4)MongoDB数据不支持数据回写。
5 附录
mongodb中标准match条件操作符说明:
$eq: 等于, 字符型需要使用引号包起来
$ne: 不等于
$gt : 大于
$lt : 小于
$gte : 大于或等于
$lte : 小于或等于
$in : 包含, 值需要[]括起来, 如: [1,2,3,4] , [‘a1’,’b1’, c1], [true,false]
$nin ** : 不包含, 值需要[]括起来**
$regex: 正则匹配, 值可以用 // 或 ‘’包起来
例如
{“time”:{$gte: ${起始时间|1}},”userId”:{$in: [${用户|’’}]},”remark”:{$regex: /${包含内容|}/i}}
最后编辑:fancy 更新时间:2025-04-24 11:27
