简介
连接到您的数据库服务器通常是设计和配置数据库支持的应用程序时需要完成的首要任务之一。虽然有许多方法可以向应用程序提供地址、监听端口、凭据和其他详细信息,但连接 URI(有时称为连接字符串或连接 URL)是以紧凑格式指定复杂配置的最强大和最灵活的方式之一。
在本指南中,我们将讨论如何使用您的 MongoDB 数据库信息和身份验证详细信息格式化连接 URI。连接 URI 分为多个部分,因此我们将逐步介绍每个部分。
百分比编码值
在我们开始之前,我们应该提到 MongoDB 连接 URI 期望百分比编码值。这意味着 URL 中具有特殊含义的任何字符都必须转换为其百分比编码的对应项,以确保库和应用程序可以正确解释它们。
您应该进行百分比编码的字符包括
:
:%3A
/
:%2F
?
:%3F
#
:%23
[
:%5B
]
:%5D
@
:%40
这些在连接 URI 中具有特殊含义。
所以如果您的密码是...
pe@ce&lo\/3
...您需要将其在连接 URI 中指定为
pe%40ce&lo\%2F3
如果您不确定字符是否应进行百分比编码,通常最好还是对其进行编码。例如,如果您不确定 \
字符是否是保留字符,则可以使用其百分比编码的等效项 %5C
以确保安全
pe%40ce%26lo%5C%2F3
在构建连接 URI 时,请记住这一点。
快速概览
在深入细节之前,我们可以查看 MongoDB 连接 URI 的规范
mongodb://[username:password@]host[:port][,...hostN[:port]][/[database][?parameter_list]]\________/\__________________/\___________________________/\__________/\________________/| | | | ||- schema |- auth credentials | | |- parameter list| || |- default authentication database||- host specifier
方括号中的部分表示可选部分。您可能已经注意到,URI 的大多数部分都是可选的。您可能也清楚地看到,您可以在 URI 中编码很多信息。
每个单独组件的快速描述
mongodb://
:用于将字符串标识为 MongoDB 连接 URI 的模式标识符。auth credentials
:URI 的可选组件,可用于指定要连接的用户和密码。username
:可选的用户名。如果包含,它应在第二个斜杠 (/
) 之后开始,并持续到冒号 (:
)。如果包含,则必须附带password
。password
:可选的密码。如果包含,它在冒号 (:
) 之后开始,并持续到 at 符号 (@
)。如果包含,则必须附带username
。
host specifier
:用于指定要连接的一个或多个主机名和端口的必需组件。host
:要连接的服务器的 IP 地址、DNS 名称或本地可解析名称。主机持续到冒号 (:
)(如果包含端口),如果指定了多个主机,则持续到逗号 (,
),否则持续到斜杠 (/
)。必须至少提供一个主机。port
:可选的端口规范,用于指示 MongoDB 在主机上监听的端口。端口以冒号 (:
) 开头,并持续到逗号 (,
)(如果提供了另一个主机)或直到斜杠 (/
)(如果没有)。
default authentication database
:如果在参数列表中未提供更具体的authSource
,则要进行身份验证的数据库的名称。如果此处或使用authSource
未指定数据库,则 MongoDB 将尝试对标准admin
数据库进行身份验证。parameter list
:可选的附加参数列表,可以影响连接行为。参数列表以问号 (?
) 开头。如果未提供默认身份验证数据库,则在最后一个主机定义之后,必须以斜杠和问号 (/?
) 开始参数列表。parameter pairs
:参数列表由键值对组成。每个对中的键和值用等号 (=
) 分隔,并且每对与下一对之间用 & 符号 (&
) 分隔。
这是一个包含所有这些组件的 MongoDB 连接 URI 示例
mongodb://sally:sallyspassword@dbserver.example:5555/userdata?tls=true&connectionTimeout=5000^ ^ ^ ^ ^ ^ ^|- schema | |- password |- host | | |- parameter list| | ||- username | |- default authentication database||- port
指定 URI 类型
连接 URI 中的第一项通常是协议规范或应用程序类型。由于 URI 将用于连接和验证到 MongoDB 数据库,我们需要使用一个标志来向我们正在使用的应用程序和库表明这一点。
MongoDB 项目仅接受 mongodb
作为有效的 URI 模式指示符。因此,您应该始终像这样启动您的连接 URI
mongodb://
模式指示符将确保后续信息在正确的上下文中进行解释。
指定用户名和密码
URI 的下一部分是用户凭据。用户凭据是可选的,但如果您不想依赖应用程序或数据库配置的默认值,则通常是必需的。
要包含用户凭据,请在模式标识符后提供用户名,后跟冒号 (:
)、密码,最后是 at 符号 (@
)
mongodb://username:password@
用户凭据是可选的,但如果包含,您必须同时提供用户名和密码组件。
指定服务器监听位置
用户凭据之后是主机说明符,它定义了服务器的监听位置。主机说明符中可以定义一个或多个主机,但由于主机说明符是必需的,因此必须至少提供一个主机。
每个主机定义都包含一个 host
和一个可选的 port
。host
可以是本地可解析主机名、由 DNS 等外部名称系统解析的名称,也可以是 IP 地址或其他直接地址。端口表示 MongoDB 在主机上监听的端口号。
要指定应用程序应尝试连接到本地计算机上的默认 MongoDB 端口 (27017),您可以使用
mongodb://localhost
如果您需要包含用户名和密码,则该信息将首先出现,并用 at 符号分隔
mongodb://username:password@localhost
要指定在非标准端口上运行的远程服务器,请用冒号分隔这些详细信息。例如,要连接到 198.51.100.22
主机上的端口 3333,您可以使用
mongodb://username:password@198.51.100.22:3333
要定义多个主机和端口对,请用逗号 (,
) 分隔这些集合,以告知应用程序如果无法访问第一个服务器,则尝试连接后续服务器。例如,要扩展前面的示例以包含监听 198.51.100.33
上端口 5555 的备用服务器,您可以使用
mongodb://username:password@198.51.100.22:3333,198.51.100.33:5555
符合规范的客户端和应用程序将首先尝试连接到监听 198.51.100.22:3333
的服务器。如果失败,它们将尝试连接到监听 198.51.100.33:5555
的 MongoDB 数据库。
提供默认身份验证数据库
在主机说明符之后,下一条数据是默认身份验证数据库。虽然并非所有数据库管理系统都是如此,但在 MongoDB 中,建立连接时必须针对特定数据库进行身份验证。
数据库名称以正斜杠 (/
) 开头,并持续到行尾或问号 (?
)。如果在参数列表中未提供 authSource
选项,则将使用默认身份验证数据库。如果两者均未提供,则客户端将针对 admin
数据库进行身份验证。
要连接到托管在监听 198.51.100.22:3333
的 MongoDB 服务器上的名为 sales
的数据库,您可以键入
mongodb://username:password@198.51.100.22:3333/sales
指定附加参数
连接 URI 的最后一部分用于为连接提供附加参数。参数列表以引导问号 (?
) 开头,并持续到行尾。如果未提供默认身份验证数据库,则指示主机规范结束的尾部斜杠必须直接位于问号 (/?
) 之前。
列出的每个参数都定义为键值对,并用等号 (=
) 连接。在第一个参数对之后,每个附加的键值对都用 & 符号 (&
) 分隔。
例如,要指定客户端应为我们先前定义的连接应用 10 秒超时,您可以使用
mongodb://username:password@198.51.100.22:3333/sales?connectTimeoutMS=10000
如果您想提供其他参数,则可以在其后添加它们,并在每对之间使用 & 符号 (&
)。例如,我们可以另外指定我们需要 SSL,并且指定的主机是我们想要连接到的副本集的成员
mongodb://username:password@198.51.100.22:3333,198.51.100.33:5555/sales?connectTimeoutMS=10000&tls=true&replicaSet=someReplicaSet
MongoDB 文档有一个完整参数列表,您可以阅读以了解更多信息。
结论
在本指南中,我们讨论了什么是 MongoDB 连接 URI、如何解释各种组件以及如何在给定一组连接信息的情况下构建自己的 URI。连接 URI 在单个字符串中编码连接到给定数据库所需的所有信息。由于这种灵活性以及它们的广泛采用,了解如何解析和构建这些字符串可能非常有用。
如果您正在使用 Prisma 管理您的 MongoDB 数据库,您需要在 Prisma 模式文件的“datasource”块中设置连接 URI。您必须为“url”字段提供连接 URI,以便 Prisma 可以连接到您的数据库。