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
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 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.
Comprobar cadena de conexión
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.
Configurar el firewall
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.
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 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.
Verifica el mecanismo de autenticación
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.
Verifica 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 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.
Comprobar cadena de conexión
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.
Verifica 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.
Verifica que el usuario esté en la base de datos 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.
Configurar el firewall
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.
Comprobar el número de conexiones
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.
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 recibes este error, prueba los siguientes métodos para resolver el problema.
Establecer opción de tiempo de espera
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))
Comprobar el número de conexiones
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.