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 librerÃa de PHP a qué implementación de MongoDB conectarse.
MongoDB\Client objeto, que crea la conexión a la implementación de MongoDB y te permite realizar operaciones en ella.
También puedes establecer opciones dentro de uno o ambos de estos componentes para personalizar la forma en que la librerÃa PHP se comporta mientras está conectada a MongoDB.
Esta guÃa describe los componentes de una cadena de conexión y muestra cómo usar un objeto MongoDB\Client 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 contra 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 cadenas de conexión, consulta Cadenas de conexión en el manual del servidor.
Cree un MongoDB\Client
Para crear una conexión a MongoDB, construye un objeto MongoDB\Client. Pasa los siguientes parámetros al constructor MongoDB\Client:
$uri": establece el URI de conexión."$uriOptions: (Opcional) Establece las opciones de URI para configurar cómo el cliente se conecta a MongoDB, incluyendo credenciales de autenticación y configuraciones de selección de servidores. Si configura las mismas opciones en este parámetro y en su cadena de conexión, los valores de$uriOptionstendrán prioridad. Para ver una lista completa de las opciones admitidas, consulta 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 conecta a una implementación de MongoDB en el puerto
27017delocalhostparámetro de opciones de URI, que instruye a la librerÃa de PHP a esperar
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 librerÃa libmongoc y la extensión PHP se encargan de gestionar las conexiones con una implementación de MongoDB. Cuando se construye una instancia de MongoDB\Client, la librerÃa PHP crea una instancia de MongoDB\Driver\Manager utilizando la misma cadena de conexión y opciones. La extensión también utiliza estos argumentos del constructor para derivar una clave hash para los clientes persistentes libmongoc. Si ya persististe un cliente libmongoc utilizando una clave, se reutiliza. De lo contrario, un nuevo cliente libmongoc se creará y permanecerá activo durante toda la duración del proceso de trabajo de PHP. Para obtener más información sobre este proceso, consulte la documentación de la extensión 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 persistentes de libmongoc no se liberan hasta que termina el proceso del trabajador de PHP. Como resultado, las conexiones a una implementación de MongoDB podrÃan permanecer abiertas después de que un objeto MongoDB\Driver\Manager salga del alcance. Mientras que esto normalmente no representa un problema para las aplicaciones que se conectan a una sola implementación de MongoDB, podrÃa ocasionar errores en las siguientes situaciones:
PHP-FPM está configurado con
pm.max_requests=0para que los trabajadores nunca se reinicien, y una aplicación PHP se implemente muchas veces con pequeños cambios en su cadena de conexión MongoDB u opciones. Esto podrÃa llevar a una acumulación delibmongocobjetos de cliente en cada proceso de trabajador.Una aplicación ocasionalmente se conecta a una implementación separada de MongoDB en un componente 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 liberar cualquier cliente libmongoc no utilizado y seguir usando un cliente persistente para la última cadena de conexión.
El segundo caso requiere una solución diferente. Especificar true para la opción de driver disableClientPersistence indica a la librerÃa PHP crear un nuevo libmongoc cliente y garantizar que se libere cuando el respectivo MongoDB\Driver\Manager quede fuera de alcance.
El siguiente código demuestra cómo configurar la opción disableClientPersistence a true al crear un cliente:
$client = new MongoDB\Client( uri: getenv('MONGODB_URI') ?: 'mongodb://127.0.0.1/', driverOptions: ['disableClientPersistence' => true],);Nota
Si desactiva la persistencia del cliente, la librerÃa 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 la creación de un objeto MongoDB\Client en la librerÃa PHP, consulte la siguiente documentación de la API: