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 在同步期间扫描其他字段值,从而实现更智能的行为,例如改进条形图上的自动分箱。

连接到 MongoDB Atlas 集群

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: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 仅扫描文档样本的原因是,如果在每次同步时扫描每个集合中的每个文档,将对数据库造成过大的压力。虽然采样在保持 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 版本的文档。

© . All rights reserved.