Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/ / /
PHP 库手册
/

创建MongoDB客户端

要连接到MongoDB 部署,您必须创建以下项目:

  • 连接 URI (也称为连接string ),用于告知PHP库要连接到哪个MongoDB部署。

  • MongoDB\Client对象,用于创建与MongoDB 部署的连接并允许您对其执行操作。

您还可以在这两个组件中的一个或两个中设立选项,以自定义PHP库在连接到MongoDB时的行为方式。

本指南介绍了连接string的组件,并演示了如何使用 MongoDB\Client对象连接到MongoDB部署。

标准连接string包括以下组件:

组件
说明

mongodb://

必需。将其标识为标准连接格式中字符串的前缀。

db_username:db_password

可选。 身份验证凭证。 如果包含这些内容,客户端将根据authSource中指定的数据库对用户进行身份验证。 有关authSource连接选项的更多信息,请参阅身份验证机制。

host[:port]

必需。 运行 MongoDB 的主机和可选端口号。 如果不包含端口号,驱动程序将使用默认端口27017

/defaultauthdb

可选。 如果连接string包含 db_username:db_password@ 身份验证档案但不包含 authSource 选项,则要使用的身份验证数据库。 如果不包含此组件,客户端将根据admin数据库对用户进行身份验证。

?<options>

可选。 一个查询string ,它将特定于连接的选项指定为 <name>=<value> 对。 有关这些选项的完整说明,请参阅指定连接选项

要学习;了解有关连接字符串的更多信息,请参阅服务器手册中的连接字符串

要创建与MongoDB 的连接,请构造一个 MongoDB\Client对象。将以下参数传递给 MongoDB\Client 构造函数:

  • $uri:设置连接 URI。

  • $uriOptions(可选)设置 URI 选项以配置客户端连接到MongoDB 的方式,包括身份验证凭证和服务器选择设置。如果在此参数和连接字符串中设立相同的选项,则 $uriOptions 值优先。 要查看支持选项的完整列表,请参阅指定连接选项指南。

  • $driverOptions(可选)设置用于配置根本的PHP扩展行为的选项,包括 TLS 连接的数据加密设置和证书验证选项。要查看支持选项的完整列表,请参阅API文档中的 MongoDB\Client::__construct()

此示例将构造一个客户端并传递以下参数:

  • 连接 URI,用于连接到 localhost 的端口 27017 上的MongoDB 部署

  • URI 选项参数,指示PHP库在生成错误之前等待 10000 毫秒以进行服务器选择

<?php
$uri = 'mongodb://localhost:27017';
$uriOptions = ['serverSelectionTimeoutMS' => 10000];
$client = new MongoDB\Client($uri, $uriOptions);

libmongoc库和PHP扩展处理与MongoDB 部署的连接。当您构造MongoDB\Client 实例时, PHP库会使用相同的连接字符串和选项创建MongoDB\ 驱动程序\ 经理 实例。该扩展还使用这些构造函数参数为持久libmongoc 客户端派生哈希键。如果您以前使用密钥持久保存了libmongoc 客户端,则系统会重复使用该客户端。否则,将创建一个新的libmongoc 客户端,并在PHP工作进程的生命周期内保留。要学习;了解有关此进程的更多信息,请参阅PHP扩展文档。

每个 libmongoc客户端都维护自己与MongoDB 部署的连接及其拓扑结构视图。 当您重复使用持久性 libmongoc客户端时, PHP库可以避免建立新连接和重新发现拓扑结构的开销。 这种方法通常可以提高性能,并且是驱动程序的默认行为。

在PHP工作进程结束之前,持久 libmongoc 客户端不会释放。因此,在 MongoDB\Driver\Manager对象超出范围后,与MongoDB 部署的连接可能会保持打开状态。虽然对于连接到一个MongoDB 部署的应用程序来说,这通常不是问题,但在以下情况下可能会导致错误:

  • PHP-FPM 配置了 pm.max_requests=0,因此工作线程永不重生,并且PHP应用程序可以多次部署,只需对其MongoDB连接字符串或选项进行少量更改。 这可能会导致每个工作进程中累积 libmongoc 个客户端对象。

  • 应用程序偶尔会连接到后端组件中的单独MongoDB 部署,其中请求延迟不是最重要的方面。

在第一种情况下,作为应用程序部署的一部分重新启动PHP -FPM 允许应用程序发布任何未使用的 libmongoc 客户端,并仍然使用持久客户端作为最新的连接字符串。

第二种情况需要不同的解决方案。 为 disableClientPersistence驾驶员选项指定 true 会指示PHP库创建新的 libmongoc客户端,并确保在相应的 MongoDB\Driver\Manager 超出范围时将其释放。

以下代码演示了如何在创建客户端时将 disableClientPersistence 选项设立为 true

<?php
$client = new MongoDB\Client(
uri: getenv('MONGODB_URI') ?: 'mongodb://127.0.0.1/',
driverOptions: ['disableClientPersistence' => true],
);

注意

如果禁用客户端持久性,则PHP库需要更多时间来建立与MongoDB 部署的连接并发现其拓扑结构。

要学习;了解有关在PHP库中创建MongoDB\Client对象的详情,请参阅以下API文档:

后退

连接

在此页面上