Esta página ofrece posibles soluciones a los problemas que puede encontrar al utilizar la biblioteca PHP para conectarse a una implementación de MongoDB.
Nota
Esta página aborda solo los problemas de conexión. Si encuentras otros problemas al utilizar MongoDB o la librería PHP, visita los siguientes recursos:
La La página Problemas y Ayuda para obtener información sobre cómo reportar errores, contribuir a la librería y encontrar más recursos
El MongoDB Etiqueta de Stack Overflowo la comunidad MongoDB Reddit para encontrar ayuda para preguntas generales
Errores de conexión al servidor
Cuando ocurre un problema al intentar conectar con un servidor, la librería PHP devuelve un mensaje de error. Si este error se asemeja al siguiente mensaje, indica que la librería no puede conectarse a una implementación de MongoDB:
No suitable servers found (`serverSelectionTryOnce` set): [connection refused calling hello on 'localhost:27017']
Las siguientes secciones describen métodos que podrían ayudar a resolver el problema.
Verifica la URI de conexión
Verifique que el nombre de host y el número de puerto en la URI de conexión sean correctos. En el mensaje de error de ejemplo, el nombre de host es 127.0.0.1 y el puerto es 27017. El valor del puerto por defecto para una implementación de MongoDB Server es 27017, pero puede configurar MongoDB para que escuche en otro puerto.
Al conectarse a un conjunto de réplicas, incluya todos los hosts del conjunto de réplicas en la URI de conexión. Separe cada host en la cadena de conexión con una coma. Esto permite que la biblioteca establezca una conexión si uno de los hosts no está disponible.
Para aprender cómo especificar varios hosts de sets de réplicas, consulta la sección Sets de réplicas de la guía Elegir un objetivo de conexión.
Configura el Firewall
Si tu implementación de MongoDB está alojada detrás de un firewall, asegúrate de que el puerto en el que MongoDB escucha esté abierto en el firewall. Si tu implementación escucha en el puerto de red por defecto, asegúrate de que el puerto 27017 esté abierto en el firewall. Si su implementación escucha en un puerto diferente, asegúrese de que ese puerto esté abierto en el firewall.
Advertencia
No abras un puerto de firewall a menos que estés seguro de que es el que utiliza tu implementación de MongoDB.
Errores de autenticación
Es posible que la librería PHP no pueda conectarse a una implementación de MongoDB si la autorización no está configurada correctamente. En estos casos, la librería genera un mensaje de error similar al siguiente mensaje:
Authentication failed.
Las siguientes secciones describen métodos que pueden ayudar a resolver el problema.
Verifica el formato de las credenciales
Una de las causas más comunes de problemas de autenticación es el formato inválido de credenciales en el URI de conexión de MongoDB.
Tip
Para aprender más información sobre el uso de URIs de conexión, consulta URI de conexión en la guía Crear un cliente de MongoDB.
Si tu URI de conexión contiene un nombre de usuario y contraseña, asegúrate de que estén correctamente formateados.
Nota
Debe codificar en porcentaje los siguientes caracteres si aparecen en su nombre de usuario o contraseña:
: / ? # [ ] @
Utilice su nombre de usuario y contraseña codificados por porcentaje en su URI de conexión.
Verifica el mecanismo de autenticación
Asegúrate de que tus credenciales y mecanismo de autenticación sean correctos. Puedes especificar las credenciales de autenticación en las opciones de tu URI de conexión.
Si utilizas el parámetro $uriOptions para especificar un mecanismo de autenticación, asegúrate de configurar la opción 'authMechanism' con el mecanismo correcto. El siguiente código muestra cómo especificar el mecanismo de autenticación SCRAM-SHA-1 en un parámetro de opciones:
$uriOptions = [ 'username' => '<username>', 'password' => '<password>', 'authSource' => '<authentication database>', 'authMechanism' => 'SCRAM-SHA-1', ]; $client = new MongoDB\Client( 'mongodb://<hostname>:<port>', $uriOptions, );
Para obtener más información sobre cómo especificar los mecanismos de autenticación, consulta la sección Mecanismos de autenticación.
Verifica que el usuario esté en la base de datos de autenticación
Cuando se utiliza un método de autenticación basado en nombre de usuario y contraseña, el nombre de usuario debe estar definido en la base de datos de autenticación.
La base de datos de autenticación por defecto es la base de datos admin. Para utilizar una base de datos diferente para la autenticación, especifique la opción authSource en el URI de conexión.
El siguiente ejemplo instruye a MongoDB para que use la base de datos users como la base de datos de autenticación:
$uri = 'mongodb://<username>:<password>@<hostname>:<port>/?authSource=users'; $client = new MongoDB\Client($uri);
Errores de resolución de DNS
Es posible que la librería PHP no pueda resolver la conexión DNS. Cuando esto sucede, podrías recibir un mensaje de error similar al siguiente mensaje:
No suitable servers found (`serverSelectionTryOnce` set): [Failed to resolve '<host>'].
Si la biblioteca informa este error, pruebe los métodos de las siguientes secciones para resolver el problema.
Verifica la disponibilidad de la implementación de la base de datos
Si se está conectando a MongoDB Atlas y su controlador no puede encontrar el host DNS de la implementación de la base de datos Atlas, es posible que la implementación de la base de datos se pause o elimine.
Asegúrese de que la implementación de la base de datos exista en Atlas. Si el clúster está en pausa, puede reanudarlo en la interfaz de usuario de Atlas o en la interfaz de línea de comandos de Atlas.
Para saber cómo reanudar un clúster,consulte Reanudar un clúster en la documentación de Atlas.
Verifica las direcciones de la red
Verifica que las direcciones de red o los nombres de host en el URI de conexión sean correctos.
Si tu implementación está alojada en MongoDB Atlas, puedes seguir el tutorial Conectar con tu clúster para encontrar tu URI de conexión de Atlas.