SQL 建模方式
Sugar BI 中 MongoDB 可以使用 SQL 建模方式进行数据的可视化 ,但是 MongoDB 本身不支持 SQL 语句,所以它的数据绑定方法比较特殊。
在 SQL 模型编辑里参考如下图所示的方式配置:
其中 SQL 语句 里对应的是 Mongo 的 Query 命令。
如果要嵌入过滤条件,请使用硬嵌入的方式,类似如下写法:
db.mycollection.find({"net": "{conditions.net}"})
需要注意 MongoDB 目前只支持一层,如果查询的结果是深层内容,将以字符串的方式来展现,比如如下例子插入的数据
db.inventory.insertMany([
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);
展现成图表会变成下图的样子,其中的 size 是以 json 的形式来显示
数据模型方式
Sugar BI 中也可以使用数据模型的方式对接 MongoDB,需要 MongoDB 安装官方提供的 mongosqld 连接组件,并且使用 MongoDB 官方的 MySQL 客户端方式 进行验证,在验证成功之后,就可以使用 Sugar BI 中的 MySQL 8
类型的数据源进行对接。
如果您使用 root 权限的 admin 账号,那么很简单,按照官方文档进行即可,如果您要使用read
只读权限的账号,可以参看如下步骤:
1、创建账号,并授予 read 只读权限
假设您的 mongoDB 中有一个 database 名叫sugardb
,现在创建一个只读账号sugaruser
,需要在 admin 数据库上创建,并且也同步授予 admin、sugardb 数据库的只读权限。
在 mongosh 中执行如下命令:
use admin;
db.createUser({user: 'sugaruser', pwd: '123456', roles:[{role: 'read', db: 'admin'}, {role: 'read', db: 'sugardb'}]});
运行效果如下:
输入以下命令进行用户权限的验证:
db.system.users.find();
可看到账号sugaruser
的信息:
2、验证 mongodrdl 生成 schema
在安装完官方的mongosqld
后,您可以运行以下mongodrdl
命令来验证一下生成 schema:
mongodrdl --host XXXXXX:27017 -u sugaruser -p 123456 --db sugardb --authenticationDatabase admin
3、启动 mongosqld,并使用 MySQL8 进行连接
启动 mongosqld 之前,需要先生成 ssl 证书,可使用如下命令生成证书:
openssl req -nodes -newkey rsa:2048 -keyout mongodb-bi.key -out mongodb-bi.crt -x509 -days 3650 -subj "/C=CN/ST=test/L=test/O=test Security/OU=IT Department/CN=baidu.com"
cat mongodb-bi.key mongodb-bi.crt > mongodb-bi.pem
接下来即可运行mongosqld
来启动了:
mongosqld --addr 这台机器的IP:3307 --mongo-uri mongodb://XXXXXX:27017 --auth -u sugaruser -p 123456 --sslMode allowSSL --sslPEMKeyFile ./mongodb-bi.pem --sslAllowInvalidCertificates --mongo-authenticationSource admin
最后在Sugar BI 中使用 MySQL 8
类型的数据源进行连接(之后使用数据模型将和普通 MySQL 一样,不再赘述):
4、其他后续
- 定时更新 schema,可参看 mongosqld 的
schemaRefreshIntervalSecs
参数; - 您也可以使用
nohup
来实现 mongosqld 在后台运行。