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 Cloud,您需要在 Atlas 集群中白名单 Metabase Cloud 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 还为每个 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 中没有看到某个集合的所有字段,一个解决方法是在集合的第一个文档中包含所有可能的键,并为这些键分配 null 值。这样,Metabase 就可以识别整个集合的正确模式。

数据库路由

通过数据库路由,管理员可以使用一个数据库构建一次问题,然后根据查看问题的用户,该问题将在具有相同数据结构(schema)的不同数据库上运行查询。

请参阅 数据库路由

危险区

请参阅危险区

延伸阅读

请参阅我们的故障排除指南,以 解决连接问题

阅读其他版本的 Metabase 的文档。

这有帮助吗?

感谢您的反馈!
想改进这些文档? 提交更改。
© . This site is unofficial and not affiliated with Metabase, Inc.