MongoDB

要添加数据库连接,请点击右上角的齿轮图标,然后导航到管理设置 > 数据库 > 添加数据库

支持的版本

Metabase 支持最旧的支持版本到最新的 MongoDB 稳定版本。请参阅 MongoDB 软件生命周期计划

连接到 MongoDB

有两种连接到 MongoDB 的方法

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

使用 Metabase 字段

连接到 MongoDB 的默认方法是在 Metabase 提供的字段中填写您的连接详细信息

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

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

直接连接的高级设置

  • 连接时使用 DNS SRV:使用此选项要求提供的主机是 FQDN。如果连接到 Atlas 集群,您可能需要启用此选项。如果您不知道这意味着什么,请保持禁用状态。

使用连接字符串

如果您希望使用 连接字符串连接到 MongoDB,请点击粘贴连接字符串。Metabase 用户界面将更新,并显示一个用于粘贴连接字符串的字段。

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

  • tlsCertificateKeyFile
  • tlsCertificateKeyFilePassword
  • tlsCAFile

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

两种连接选项的通用设置

  • 使用 SSH 隧道:某些数据库安装只能通过 SSH 跳板主机连接访问。当 VPN 不可用时,此选项还提供额外的安全层。启用此选项通常比直接连接慢。
  • 重新运行简单探索的查询:当此选项开启时,当用户使用“汇总”和“筛选”按钮查看表格或图表进行简单探索时,Metabase 将自动运行查询。如果查询此数据库速度较慢,您可以关闭此选项。此设置不影响下钻或 SQL 查询。
  • 选择何时进行同步和扫描:默认情况下,Metabase 每小时进行轻量级同步,每天进行密集的字段值扫描。如果您有大型数据库,我们建议您开启此选项并查看字段值扫描发生的时间和频率。
  • 定期重新指纹表:此设置默认禁用,它使 Metabase 能够在同步期间扫描额外的字段值,从而实现更智能的行为,例如改进条形图上的自动分箱。

连接到 MongoDB Atlas 集群

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

IP 地址白名单

如果您使用的是 Metabase 云,则需要在您的 Atlas 集群中将 Metabase 云 IP 地址添加到白名单。如果您使用的是自托管 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的更多信息。

Metabase 如何同步 MongoDB 中的数据

由于 MongoDB 包含非结构化数据,Metabase 采用不同的方法来同步数据库的元数据。为了了解架构,Metabase 将查询前 500 个和后 500 个文档(大部分计算在 MongoDB 中完成)。此抽样有助于 Metabase 执行诸如区分日期时间字段和字符串字段之类的操作,并为人们提供预填充的筛选器。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 将能够识别整个集合的正确架构。

延伸阅读

请参阅我们的故障排除指南,了解连接故障排除

阅读其他Metabase 版本的文档。