MongoDB
要添加数据库连接,请点击右上角的齿轮图标,然后导航到管理员设置 > 数据库 > 添加数据库。
支持的版本
Metabase 支持 MongoDB 的最旧支持版本到最新稳定版本。请参阅 MongoDB 软件生命周期计划。
连接到 MongoDB
有两种方法可以连接到 MongoDB:
- 使用 Metabase 字段输入您的连接详细信息。
- 粘贴您的 连接字符串。
使用 Metabase 字段
连接 MongoDB 的默认方法是在 Metabase 提供的字段中填写您的连接详细信息:
- 主机
- 数据库名称
- 端口
- 用户名
- 密码
- 身份验证数据库(可选)
- 附加连接字符串选项(可选)
您还可以选择 使用安全连接 (SSL)。启用 SSL 并在输入文本框中粘贴服务器 SSL 证书链的内容。此选项仅适用于此连接方法(即,使用连接字符串连接时不能包含证书)。
直接连接的高级设置
- 连接时使用 DNS SRV 使用此选项要求提供的主机是 FQDN。如果连接到 Atlas 集群,您可能需要启用此选项。如果您不知道这意味着什么,请保持禁用。
使用连接字符串
如果您更喜欢使用 连接字符串 连接到 MongoDB,请单击 粘贴连接字符串。Metabase 用户界面将更新一个字段以粘贴您的连接字符串。
Metabase 目前不支持以下连接字符串参数:
tlsCertificateKeyFile
tlsCertificateKeyFilePassword
tlsCAFile
如果您需要使用证书,请通过 默认方法 连接并启用 使用安全连接 (SSL)。
两种连接选项的通用设置
- 使用 SSH 隧道:某些数据库安装只能通过 SSH 跳板主机连接访问。当没有 VPN 可用时,此选项还提供额外的安全层。启用此选项通常比直接连接慢。
- 重新运行简单探索查询:当此选项打开时,当用户在查看表或图表时使用“汇总”和“筛选”按钮进行简单探索时,Metabase 将自动运行查询。如果查询此数据库很慢,您可以将其关闭。此设置不影响钻取或 SQL 查询。
- 选择同步和扫描发生的时间:请参阅同步和扫描。
- 定期重新指纹表:此设置默认禁用,它使 Metabase 能够在同步期间扫描附加字段值,从而实现更智能的行为,例如改进条形图上的自动分箱。
连接到 MongoDB Atlas 集群
白名单 IP 地址
如果您使用的是 Metabase Cloud,您需要将 Metabase Cloud IP 地址 列入您的 Atlas 集群的白名单。如果您使用的是自托管 Metabase,您需要将您的 Metabase 实例的 IP 列入白名单。
- 登录您的 Atlas 集群
- 转到 网络访问
- 添加您的 Metabase 用于连接的 IP 地址。
将 Metabase 连接到您的 Atlas 集群
Atlas “连接”界面中提供的连接字符串不包含数据库。Metabase 要求您在连接时提供数据库名称,因此您需要编辑连接字符串以添加数据库名称。
-
登录您的 Atlas 账户
-
选择要连接的集群,然后单击 连接。
-
选择 驱动程序。
-
从 将您的连接字符串添加到您的应用程序代码 部分复制连接字符串。
- 在 Metabase 中,转到 管理 -> 数据库,然后单击 添加数据库 按钮。
- 从下拉列表中选择 MongoDB,并为此数据库输入一个 显示名称。
- 单击 “粘贴连接字符串” 并粘贴您的连接字符串。
-
编辑连接字符串,在
/
后面包含数据库名称mongodb+srv://metabot:metapass@my-test-cluster.a5ej7.mongodb.net/DATABASE_NAME?retryWrites=true&w=majority&appName=my-test-cluster
如果您使用 Metabase 字段输入 Atlas 集群的连接信息,而不是使用连接字符串,您可能需要打开 连接时使用 DNS SRV。
有关 高级选项 的更多信息。
通过命令行配置 SSL
您可以通过 Metabase UI 输入自签名证书(尽管在使用连接字符串时不行),或者您可以使用命令行添加自签名证书。
cp /usr/lib/jvm/default-jvm/jre/lib/security/cacerts ./cacerts.jks
keytool -import -alias cacert -storepass changeit -keystore cacerts.jks -file my-cert.pem
然后,使用存储启动 Metabase
java -Djavax.net.ssl.trustStore=cacerts.jks -Djavax.net.ssl.trustStorePassword=changeit -jar metabase.jar
了解更多关于 使用 MongoDB 配置 SSL 的信息。
Metabase 如何在 MongoDB 中同步数据
由于 MongoDB 包含非结构化数据,Metabase 采用不同的方法来同步数据库的元数据。为了了解模式,Metabase 将查询前 500 个和后 500 个文档(大部分计算在 MongoDB 中完成)。这种抽样有助于 Metabase 区分日期时间字段和字符串字段,并为用户提供预填充的筛选器。Metabase 还为每个 MongoDB 集合同步 1,000 个叶字段(最深嵌套级别的字段)。Metabase 仅扫描文档样本的原因是,如果在每次同步时扫描每个集合中的每个文档,将会给数据库带来过大的压力。虽然抽样在保持 Metabase 最新方面做得相当好,但它也可能意味着新字段有时会遗漏,导致可视化问题,甚至字段无法在结果中显示。有关更多信息,请查阅我们的故障排除指南。
通用连接问题
- 使用
DNS SRV
连接,这是较新 Atlas 集群的推荐方法。 - 您是否检查过您的集群主机白名单? 在测试连接但看到失败时,您是否尝试将 IP 白名单设置为
0.0.0.0/0
?将此地址列入白名单允许来自任何 IP 地址的连接。如果您知道客户端的 IP 地址或 CIDR 块,请改用它们。 - 连接到辅助服务器。连接到集群时,始终在连接字符串中使用
?readPreference=secondary
参数,这允许 Metabase 从辅助服务器读取,而不是消耗主服务器的资源。
我向数据库添加了字段,但在 Metabase 中看不到它们
Metabase 可能不会同步您的所有字段。由于 MongoDB 集合中的任何文档都可以包含任意数量的字段,因此要实现所有字段的 100% 覆盖,唯一的方法是扫描每个集合中的所有文档。Metabase 不进行完整扫描的原因是它会给您的数据库带来过大的压力。
相反,Metabase 通过扫描每个集合中的 1000 个文档样本(每个集合中的前 500 个文档和后 500 个文档)来获取集合中字段的样本。
如果您在 Metabase 中没有看到集合的所有字段显示,一个解决方法是在集合的第一个文档中包含所有可能的键,并赋予这些键空值。这样,Metabase 将能够识别整个集合的正确模式。
数据库路由
通过数据库路由,管理员可以使用一个数据库构建一次问题,然后根据查看问题的用户,该问题将在具有相同数据结构(schema)的不同数据库上运行查询。
请参阅 数据库路由。
危险区
请参阅危险区。
延伸阅读
请参阅我们的故障排除指南以 解决您的连接问题。
阅读其他版本的 Metabase 的文档。