Docs Menu
Docs Home
/ /

Solución de problemas de conexión

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 Página deproblemas y ayuda, que contiene información sobre cómo informar errores, contribuir al controlador y encontrar recursos adicionales

  • El MongoDB Etiqueta Stack Overflow o la comunidad MongoDB Reddit para preguntas, debates o soporte técnico general

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.

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.

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.

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.

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.

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.

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))

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.

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.

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.

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.

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.

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.

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.

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))

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.

Volver

Pools de conexiones