MongoDB数据源

更新时间:2020-03-30

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 在后台运行。

本页内容