Overview
要连接到MongoDB 部署,您必须创建以下项目:
连接 URI (也称为连接string ),用于告知PHP库要连接到哪个MongoDB部署。
MongoDB\Client对象,用于创建与MongoDB 部署的连接并允许您对其执行操作。
您还可以在这两个组件中的一个或两个中设立选项,以自定义PHP库在连接到MongoDB时的行为方式。
本指南介绍了连接string的组件,并演示了如何使用 MongoDB\Client
对象连接到MongoDB部署。
连接 URI
标准连接string包括以下组件:
组件 | 说明 |
---|---|
| 必需。将其标识为标准连接格式中字符串的前缀。 |
| 可选。 身份验证凭证。 如果包含这些内容,客户端将根据 |
| 必需。 运行 MongoDB 的主机和可选端口号。 如果不包含端口号,驱动程序将使用默认端口 |
| 可选。 如果连接string包含 |
| 可选。 一个查询string ,它将特定于连接的选项指定为 |
要学习;了解有关连接字符串的更多信息,请参阅服务器手册中的连接字符串。
创建MongoDB\Client
要创建与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
毫秒以进行服务器选择
$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
:
$client = new MongoDB\Client( uri: getenv('MONGODB_URI') ?: 'mongodb://127.0.0.1/', driverOptions: ['disableClientPersistence' => true], );
注意
如果禁用客户端持久性,则PHP库需要更多时间来建立与MongoDB 部署的连接并发现其拓扑结构。
API 文档
要学习;了解有关在PHP库中创建MongoDB\Client
对象的详情,请参阅以下API文档: