Overview
Para conectarse a una implementación de MongoDB, debe crear los siguientes elementos:
URI de conexión, también conocido como cadena de conexión, que le indica a la biblioteca PHP a qué implementación de MongoDB conectarse.
Objeto MongoDB\Client, que crea la conexión a la implementación de MongoDB y le permite realizar operaciones en ella.
También puede configurar opciones dentro de uno o ambos de estos componentes para personalizar la forma en que se comporta la biblioteca PHP mientras está conectada a MongoDB.
Esta guía describe los componentes de una cadena de conexión y muestra cómo utilizar una MongoDB\Client objeto para conectarse a una implementación de MongoDB.
URI de conexión
Una cadena de conexión estándar incluye los siguientes componentes:
Componente | Descripción |
|---|---|
| Requerido. Un prefijo que identifica esto como un string en el formato de conexión estándar. |
| Opcional. Credenciales de autenticación. Si las incluye, el cliente autentica al usuario con la base de datos especificada en |
| Requerido. El host y el número de puerto opcional donde se ejecuta MongoDB. Si no incluyes el número de puerto, el controlador utiliza el puerto por defecto, |
| Opcional. La base de datos de autenticación que se debe usar si la cadena de conexión incluye las credenciales de autenticación |
| Opcional. Un string del query que especifica opciones específicas de conexión como pares |
Para obtener más información sobre las cadenas de conexión, consulte Cadenas de conexión en el manual del servidor.
Crear un MongoDB\Client
Para crear una conexión a MongoDB, construya un objeto MongoDB\Client. Pase los siguientes parámetros al constructor MongoDB\Client:
$uri:Establece la URI de conexión.$uriOptions: (Opcional) Establece las opciones de URI para configurar cómo se conecta el cliente a MongoDB, incluyendo las credenciales de autenticación y la configuración de selección de servidor. Si establece las mismas opciones en este parámetro y en la cadena de conexión, los$uriOptionsvalores prevalecen. Para ver una lista completa de las opciones compatibles, consulte la guía "Especificar opciones de conexión".$driverOptions: (Opcional) Establece opciones para configurar el comportamiento de la extensión PHP subyacente, incluyendo la configuración de cifrado de datos y las opciones de validación de certificados para las conexiones TLS. Para ver una lista completa de opciones admitidas, consulteMongoDB\Client::__construct()en la documentación de la API.
Ejemplo
Este ejemplo construye un cliente y pasa los siguientes parámetros:
URI de conexión, que se conecta a una implementación de MongoDB en el puerto
27017delocalhostParámetro de opciones de URI, que indica a la biblioteca PHP que espere
10000milisegundos para la selección del servidor antes de generar un error
$uri = 'mongodb://localhost:27017'; $uriOptions = ['serverSelectionTimeoutMS' => 10000]; $client = new MongoDB\Client($uri, $uriOptions);
Persistencia del cliente
La libmongoc biblioteca y la extensión PHP gestionan las conexiones a una implementación de MongoDB. Al construir una instancia, la biblioteca PHP crea un MongoDB\Client archivo MongoDB\Driver\Manager.Instancia usando la misma cadena de conexión y opciones. La extensión también usa esos argumentos del constructor para derivar una clave hash para libmongoc clientes persistentes. Si previamente persistió un libmongoc cliente usando una clave, esta se reutiliza. De lo contrario,libmongoc se crea un nuevo cliente y se persiste durante la vida útil del proceso de trabajo de PHP. Para obtener más información sobre este proceso, consulte la documentación de la extensión de PHP.
Cada cliente libmongoc mantiene sus propias conexiones con la implementación de MongoDB y una vista de su topología. Al reutilizar un cliente libmongoc persistente, la biblioteca PHP puede evitar la sobrecarga de establecer nuevas conexiones y redescubrir la topología. Este enfoque generalmente mejora el rendimiento y es el comportamiento por defecto del driver.
Los clientes libmongoc persistentes no se liberan hasta que finaliza el proceso de trabajo de PHP. Por lo tanto, las conexiones a una implementación de MongoDB podrían permanecer abiertas después de que un objeto MongoDB\Driver\Manager quede fuera de alcance. Si bien esto no suele ser un problema para las aplicaciones que se conectan a una implementación de MongoDB, podría causar errores en las siguientes situaciones:
PHP-FPM está configurado con
pm.max_requests=0, por lo que los procesos de trabajo nunca se regeneran, y una aplicación PHP se implementa muchas veces con pequeños cambios en su cadena de conexión o en sus opciones de MongoDB. Esto podría provocar una acumulación delibmongocobjetos cliente en cada proceso de trabajo.Ocasionalmente, una aplicación se conecta a una implementación de MongoDB separada en un componente de backend donde la latencia de la solicitud no es el aspecto más importante.
En el primer caso, reiniciar PHP-FPM como parte de la implementación de la aplicación permite que la aplicación libere cualquier cliente libmongoc no utilizado y aún use un cliente persistente para la última cadena de conexión.
El segundo caso requiere una solución diferente. Especificar true en la opción del controlador disableClientPersistence indica a la biblioteca PHP que cree un nuevo cliente libmongoc y se asegure de liberarlo cuando el MongoDB\Driver\Manager correspondiente quede fuera de alcance.
El siguiente código demuestra cómo establecer la opción disableClientPersistence en true al crear un cliente:
$client = new MongoDB\Client( uri: getenv('MONGODB_URI') ?: 'mongodb://127.0.0.1/', driverOptions: ['disableClientPersistence' => true], );
Nota
Si deshabilita la persistencia del cliente, la biblioteca PHP requiere más tiempo para establecer conexiones con la implementación de MongoDB y descubrir su topología.
Documentación de la API
Para obtener más información sobre cómo crear un objeto MongoDB\Client en la biblioteca PHP, consulte la siguiente documentación de API: