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 aborda únicamente problemas de conexión. Si encuentra algún otro problema con MongoDB o el controlador, visite los siguientes recursos:
La Preguntas frecuentes (FAQ) para el controlador de Go
La página de Problemas y Ayuda, que proporciona información sobre cómo reportar errores, contribuir al controlador y encontrar recursos adicionales.
La MongoDB Community Forums 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 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 de Go puede no conectarse a una instancia de MongoDB si la autorización no está configurada correctamente. En estos casos, el controlador muestra 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 cadenas de conexión, consulta URI de conexión en la Guía de conexión.
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 de 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 := mongo.Connect(context.TODO(), 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úrate de estar utilizando el mecanismo de autenticación y las credenciales correctas. Para obtener más información acerca de los errores de autenticación, consulta 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 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.
Verifica el número de conexiones
Cada instancia de Client admite un número máximo de conexiones abiertas simultáneas en su pool de conexiones. El parámetro de configuración maxPoolSize define este valor y se establece en 100 por defecto. Si ya hay un número de conexiones abiertas igual a maxPoolSize, el servidor espera hasta que haya una conexión disponible. Si este tiempo de espera supera el valor de maxIdleTimeMS, el controlador responde con un error. Para más información sobre cómo funciona el agrupamiento de conexiones, consulta ¿Cómo funciona el agrupamiento de conexiones en el driver Go? en la FAQ.
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 := mongo.Connect(context.TODO(), uri)
Verifica 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.