Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Solución de problemas de conexión

Esta página ofrece soluciones potenciales a los problemas que puedas encontrar al utilizar el driver Go de MongoDB para conectarte 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:

  • La página de Problemas y ayuda, que contiene información sobre el reporte de errores, la contribución al driver y la búsqueda de 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 hostname 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.

Verifica que el nombre del host y el número de puerto en la cadena de conexión sean correctos. En el mensaje de error de muestra, el nombre de host es 127.0.0.1 y el puerto es 27017. El valor de puerto por defecto para una instancia de MongoDB es 27017, pero puede configurar MongoDB para que se comunique en otro puerto.

Suponiendo que tu implementación de MongoDB usa el puerto por defecto, verifica que el puerto 27017 esté abierto en tu firewall. Si tu implementación utiliza un puerto diferente, verifica que el puerto correcto esté abierto en tu firewall.

Advertencia

No abras un puerto en tu firewall a menos que estés seguro de que es el puerto utilizado por tu 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 acerca de las cadenas de conexión, consulta 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:

: / ? # [ ] @

Cuando te conectes a un set de réplicas, incluye todos los hosts del set de réplicas en tu cadena de conexión. Separar cada uno de los hosts en la cadena de conexión con una coma. Esto permite que el driver establezca una conexión si uno de los hosts es inaccesible.

Asegúrate de que tus credenciales y el mecanismo de autenticación sean correctos. Usted puede almacenar sus credenciales de autenticación en variables de entorno o puede 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 envía un comando después de que se realiza 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.

Verifica que la cadena de conexión en tu aplicación sea exacta. Para obtener más información sobre cómo verificar su 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.

Verifica 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, consulta 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 cómo configurar el firewall, consulta Error de conexión.

Cada instancia de Client admite un número máximo de conexiones abiertas simultáneamente en su pool de conexiones. El parámetro de configuración maxPoolSize define este valor y está establecido en 100 por defecto. Si ya hay un número de conexiones abiertas igual a maxPoolSize, el servidor esperará hasta que haya disponible una conexión. Si este tiempo de espera supera el valor de maxIdleTimeMS, el controlador responderá con un error. Para obtener más información sobre cómo funciona el agrupamiento de conexiones, consulta Crear un pool 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 recibes este error, prueba los siguientes métodos para resolver el problema.

El Client es compatible con una sola opción Timeout que controla la cantidad de tiempo que puede tardar en ejecutarse una sola operación. Puedes establecer este valor utilizando el método SetTimeout() o especificando la opción timeoutMS en tu cadena de conexión.

El siguiente ejemplo establece el valor de timeout ú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 exceder maxPoolSize. Para obtener más información sobre cómo comprobar el número de conexiones, consulta Error al enviar el mensaje.

Volver

Pools de conexiones