在 Metabase 中使用 MongoDB

Metabase支持MongoDB 4.2或更高版本。

Metabase如何在MongoDB中同步数据

由于MongoDB包含非结构化数据,Metabase在同步数据库元数据时采用不同的方法。为了了解模式,Metabase将扫描MongoDB中每个集合的前10,000个文档。这种抽样有助于Metabase区分日期时间字段和字符串字段,并为人们提供预填充的过滤器。Metabase只扫描文档样本的原因是因为在每次同步时扫描每个集合中的每个文档会对数据库造成过多压力。虽然抽样能够很好地保持Metabase的更新,但也可能意味着新的字段有时会遗漏,导致可视化问题,甚至某些字段无法出现在您的结果中。有关更多信息,请参阅我们的故障排除指南

连接到MongoDB

转到管理员 -> 数据库,并点击添加数据库按钮。从下拉菜单中选择MongoDB,并输入此数据库的所需显示名称

连接到MongoDB有两种方式

  1. 使用Metabase字段输入您的连接详情
  2. 粘贴您的连接字符串

使用Metabase字段

连接到MongoDB的默认方式是填写Metabase提供的字段中的连接详情

  • 主机
  • 数据库名称
  • 端口
  • 用户名
  • 密码
  • 身份验证数据库(可选)
  • 其他连接字符串选项(可选)

您还可以选择使用安全连接(SSL)。启用SSL并将服务器SSL证书链的内容粘贴到输入文本框中。此选项仅适用于此连接方法(即您不能在连接字符串中包含证书)。

直接连接的高级设置

  • 连接时使用DNS SRV 使用此选项需要提供的宿主为主机名。如果您连接到Atlas集群,可能需要启用此选项。如果您不知道这意味着什么,请禁用此选项。

使用连接字符串

如果您想使用连接字符串连接到MongoDB,请点击粘贴连接字符串。Metabase用户界面将更新以粘贴您的连接字符串的字段。

Metabase当前不支持以下连接字符串参数

  • tlsCertificateKeyFile
  • tlsCertificateKeyFilePassword
  • tlsCAFile

如果您需要使用证书,请通过默认方法连接并启用使用安全连接(SSL)

两种连接选项的共同设置

  • 使用SSH隧道:一些数据库安装只能通过SSH堡垒机连接访问。此选项在没有VPN的情况下也提供额外的安全层。启用此选项通常比直接连接慢。
  • 重新运行查询进行简单探索:当此选项开启时,Metabase将在用户使用汇总和过滤按钮进行表格或图表的简单探索时自动运行查询。如果您发现查询此数据库很慢,可以关闭此选项。此设置不影响钻取或SQL查询。
  • 选择同步和扫描发生的时间:默认情况下,Metabase会进行轻量级的每小时同步和密集型每日字段值扫描。如果您有一个大型数据库,我们建议启用此选项并审查字段值扫描何时以及如何频繁发生。
  • 定期重新指纹表:此设置(默认禁用)启用Metabase在同步期间扫描额外的字段值,允许更智能的行为,例如在条形图中改进自动分箱。

连接到MongoDB Atlas集群

您可以使用 Metabase 与 Atlas 专用和共享集群。目前 Metabase 不支持 Atlas Serverless。

白名单 IP 地址

如果您使用的是 Metabase Cloud,您需要将 Metabase Cloud IP 地址 白名单添加到您的 Atlas 集群中。如果您使用的是自托管 Metabase,您需要将 Metabase 实例的 IP 地址白名单。

  1. 登录到您的 Atlas 集群
  2. 转到 网络访问
  3. 添加 Metabase 连接所用的 IP 地址。

将 Metabase 连接到您的 Atlas 集群

Atlas “连接”界面提供的连接字符串不包含数据库。Metabase 要求您在连接时提供数据库名称,因此您需要编辑连接字符串以添加数据库名称。

  1. 登录到您的 Atlas 账户

  2. 选择要连接的集群,然后点击 连接

    Your cluster screengrab

  3. 选择 驱动程序

  4. 将您的连接字符串添加到应用程序代码 部分复制连接字符串。

    Connect screengrab

  5. 在 Metabase 中,转到管理 -> 数据库,然后点击 添加数据库 按钮。
  6. 从下拉菜单中选择 MongoDB,并为该数据库输入一个 显示名称
  7. 点击 “粘贴连接字符串” 并粘贴您的连接字符串。
  8. 编辑连接字符串,在 / 后包含数据库名称。

    mongodb+srv://metabot:[email protected]/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 的更多信息。

通用连接问题

  • 使用 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 中看不到集合的所有字段,一种解决方法是包括集合第一个文档中的所有可能的键,并给这些键赋予 null 值。这样,Metabase 就能识别整个集合的正确模式。

进一步阅读

查看我们的故障排除指南以 解决您的连接问题

阅读 Metabase 其他版本 的文档。

想改进这些文档? 提出更改。