Esta página ofrece posibles soluciones a los problemas que puede encontrar al utilizar el controlador MongoDB Go para conectarse a una implementación de MongoDB.
Nota
Esta página solo aborda problemas de conexión. Si tiene algún otro problema con MongoDB o el controlador, visite los siguientes recursos:
El MongoDB Etiqueta Stack Overflow o la comunidad MongoDB Reddit para preguntas, debates o soporte técnico general
Error de conexión
El siguiente mensaje de error es un mensaje general que indica que el controlador no puede conectarse a un servidor en el nombre de host o puerto especificado:
Error: couldn't connect to server 127.0.0.1:27017
Las siguientes secciones describen métodos que pueden ayudar a resolver el problema.
Comprobar cadena de conexión
Verifique que el nombre de host y el número de puerto en la cadena de conexión sean correctos. En el mensaje de error de ejemplo, el nombre de host es 127.0.0.1 El puerto es 27017. El valor de puerto predeterminado para una instancia de MongoDB es 27017, pero puede configurar MongoDB para que se comunique en otro puerto.
Configurar el firewall
Suponiendo que su implementación de MongoDB usa el puerto predeterminado, verifique que el puerto 27017 esté abierto en su firewall. Si su implementación usa un puerto diferente, verifique que el puerto correcto esté abierto en su firewall.
Advertencia
No abra un puerto en su firewall a menos que esté seguro de que es el puerto utilizado por su instancia de MongoDB.
Error de autenticación
El controlador Go puede fallar al conectarse a una instancia de MongoDB si la autorización no está configurada correctamente. En estos casos, el controlador genera un mensaje de error similar a uno de los siguientes:
Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server localhost:27017.
connection() error occurred during connection handshake: auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-256": (AuthenticationFailed) Authentication failed.
Las siguientes secciones describen métodos que pueden ayudar a resolver el problema.
Comprobar cadena de conexión
Una cadena de conexión no válida es la causa más común de problemas de autenticación al intentar conectarse a MongoDB.
Tip
Para obtener más información sobre las cadenas de conexión, consulte la sección URI de conexión de la guía Crear un MongoClient.
Si tu cadena de conexión contiene un nombre de usuario y una contraseña, asegúrate de que estén en el formato correcto.
Nota
Si el nombre de usuario o la contraseña incluyen uno de los siguientes caracteres, deben estar codificado en porcentaje:
: / ? # [ ] @
Al conectarse a un conjunto de réplicas, incluya todos los hosts del conjunto de réplicas en la cadena de conexión. Separe cada host con una coma. Esto permite que el controlador establezca una conexión si uno de los hosts no es accesible.
Verificar el mecanismo de autenticación
Asegúrese de que sus credenciales y el mecanismo de autenticación sean correctos. Puede almacenar sus credenciales de autenticación en variables de entorno o pasarlas al método SetAuth().
Para obtener más información sobre la autenticación, consulte la guía Mecanismos de autenticación.
Verificar que el usuario esté en la base de datos de autenticación
Para autenticar correctamente una conexión mediante un nombre de usuario y contraseña de la base de datos, 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, especifica el authSource en la cadena de conexión. El siguiente ejemplo indica al controlador que use users como la base de datos de autenticación:
uri := "mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=users" client, err := mongo.Connect(options.Client().ApplyURI(uri))
Error al enviar el mensaje
Cuando el controlador no puede enviar un comando después de realizar una solicitud, a menudo muestra el siguiente mensaje de error general:
com.mongodb.MongoSocketWriteException: Exception sending message
Las siguientes secciones describen métodos que pueden ayudar a resolver el problema.
Comprobar cadena de conexión
Verifique que la cadena de conexión de su aplicación sea correcta. Para obtener más información sobre cómo verificar la cadena de conexión, consulte Error de conexión y Error de autenticación.
Verificar el mecanismo de autenticación
Asegúrese de utilizar el mecanismo de autenticación y las credenciales correctas. Para obtener más información sobre errores de autenticación, consulte Error de autenticación.
Verificar que el usuario esté en la base de datos de autenticación
Verifique que el usuario esté en la base de datos de autenticación correcta. Para obtener más información sobre la base de datos de autenticación, consulte Error de autenticación.
Configurar el firewall
El firewall debe tener un puerto abierto para comunicarse con la instancia de MongoDB. Para obtener más información sobre la configuración del firewall, consulte Error de conexión.
Comprobar el número de conexiones
Cada Client instancia admite un número máximo de conexiones abiertas simultáneas en su grupo de conexiones. El parámetro de configuración maxPoolSize define este valor y está establecido en 100 de forma predeterminada. Si ya hay conexiones maxPoolSize abiertas, el servidor espera hasta que haya una disponible. Si este tiempo de espera supera el maxIdleTimeMS valor, el controlador responde con un error. Para obtener más información sobre el funcionamiento del grupo de conexiones, consulte Crear un grupo de conexiones.
Error de tiempo de espera
A veces, cuando se envía una solicitud a través del controlador al servidor, la solicitud se agota. Cuando esto sucede, puede que recibas un mensaje de error similar al siguiente:
timed out while checking out a connection from connection pool: context canceled
Si recibe este error, pruebe los siguientes métodos para resolver el problema.
Establecer opción de tiempo de espera
El valor Client admite una única opción Timeout que controla el tiempo que tarda en ejecutarse una operación. Puede establecer este valor mediante el método SetTimeout() o especificando la opción timeoutMS en la cadena de conexión.
El siguiente ejemplo establece el valor de tiempo de espera único en 5 segundos utilizando la opción de cadena de conexión:
uri := "mongodb://<db_username>:<db_password>@<hostname>:27017/?timeoutMS=5000" client, err := mongo.Connect(options.Client().ApplyURI(uri))
Comprobar el número de conexiones
El número de conexiones al servidor puede maxPoolSize superar. Para obtener más información sobre cómo comprobar el número de conexiones, consulte Error al enviar mensaje.