Overview
En esta guía, puedes aprender cómo conectarte a una instancia de MongoDB o a una implementación de set de réplicas mediante el driver de Go.
Puedes usar el controlador de Go para conectarte a implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: el servicio totalmente gestionado para las implementaciones de MongoDB en la nube
MongoDB Enterprise: la versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: la versión de MongoDB con código fuente disponible, gratuita y autogestionada
URI de conexión
Un URI de conexión, también conocido como cadena de conexión, indica al controlador cómo conectarse a MongoDB y cómo comportarse mientras está conectado.
Partes de un URI de conexión
El siguiente ejemplo explica cada parte de un URI de conexión de muestra:

En este ejemplo, utilizamos mongodb para el protocolo, que especifica el formato de cadena de conexión estándar. También se puede usar el formato de conexión de lista de nodos iniciales DNS si se desea mayor flexibilidad de implementación y la capacidad de cambiar los servidores en rotación sin volver a configurar los clientes.
La siguiente parte de la cadena de conexión contiene tu nombre de usuario de la base de datos y, si utilizas la autenticación basada en contraseña, tu contraseña. Reemplaza el valor de user con tu nombre de usuario de base de datos y pass con tu contraseña. Si se utiliza un mecanismo de autenticación que no requiere nombre de usuario ni contraseña, omite esta parte del URI de conexión.
La siguiente parte de la cadena de conexión especifica el nombre de host o la dirección IP y el puerto de tu instancia de MongoDB. En el ejemplo anterior, utilizamos sample.host como el nombre de host y 27017 como el puerto. Reemplaza estos valores para apuntar a tu instancia de MongoDB.
La última parte de la cadena de conexión especifica las opciones de conexión y autenticación. En el ejemplo, configuramos dos opciones de conexión: maxPoolSize=20 y w=majority. Para obtener más información sobre las opciones de conexión, lee la sección Opciones de conexión de esta guía.
Ejemplo de conexión
Para conectarse a MongoDB, se debe crear un cliente. Un cliente gestiona tus conexiones y ejecuta comandos de base de datos.
Tip
Reutilizar el cliente
Recomendamos reutilizar su cliente entre sesiones y operaciones. Puede usar la misma instancia de Client para realizar múltiples tareas, en lugar de crear una nueva cada vez. El tipo Client es seguro para el uso concurrente por parte de múltiples goroutines. Para obtener más información sobre cómo funciona el pool de conexiones en el driver, consulte el Página de preguntas frecuentes.
Puedes crear un cliente que use tu cadena de conexión y otras opciones del cliente si trasladas un objeto ClientOptions al método Connect().
Para especificar tu URI de conexión, pásalo al método ApplyURI(), que devuelve una nueva instancia de ClientOptions. Para establecer cualquier otra opción, llame al método asistente relevante del paquete options.
Para obtener más información sobre las opciones de conexión, consulta la sección Opciones de conexión. Para aprender más sobre la creación de un cliente, consulta la documentación de la API para Cliente y Connect().
Puedes establecer la versión Stable API como una opción para evitar cambios disruptivos mientras actualizas a una nueva versión del servidor. Para obtener más información sobre la funcionalidad de la Stable API, consulta la Página de la Stable API.
El siguiente código muestra cómo puede crear un cliente que utiliza una cadena de conexión Atlas y la versión de Stable API, conectarse a MongoDB y verificar que la conexión es exitosa:
// Connects to MongoDB and sets a Stable API version package main import ( "context" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) // Replace the placeholder with your Atlas connection string const uri = "<connection string>" func main() { // Use the SetServerAPIOptions() method to set the Stable API version to 1 serverAPI := options.ServerAPI(options.ServerAPIVersion1) opts := options.Client().ApplyURI(uri).SetServerAPIOptions(serverAPI) // Create a new client and connect to the server client, err := mongo.Connect(context.TODO(), opts) if err != nil { panic(err) } defer func() { if err = client.Disconnect(context.TODO()); err != nil { panic(err) } }() // Send a ping to confirm a successful connection var result bson.M if err := client.Database("admin").RunCommand(context.TODO(), bson.D{{"ping", 1}}).Decode(&result); err != nil { panic(err) } fmt.Println("Pinged your deployment. You successfully connected to MongoDB!") }
Tip
Siga la guía de inicio rápido para recuperar su cadena de conexión Atlas.
Otras formas de conectarse a MongoDB
Si te estás conectando a una única instancia de servidor de MongoDB o a un set de réplicas que no está alojado en Atlas, consulta las siguientes secciones para saber cómo conectarte.
Realizar la conexión a MongoDB Server en la máquina local
Si necesitas ejecutar un servidor MongoDB en tu máquina local para fines de desarrollo, sigue los siguientes pasos:
Instale y configure MongoDB Server.
Inicia el servidor.
Importante
Se debe proteger siempre el servidor MongoDB de ataques maliciosos. Se debe consultar nuestra Lista de verificación de seguridad para ver una lista de recomendaciones de seguridad.
Después de iniciar MongoDB Server correctamente, se debe especificar la cadena de conexión en el código de conexión del driver.
Si MongoDB Server se está ejecutando localmente, se puede utilizar la cadena de conexión "mongodb://localhost:<port>" en que <port> es el número de puerto que se configuró para que el servidor escuche las conexiones entrantes.
Si deseas especificar un nombre de host o una dirección IP diferente, consulta nuestra entrada en el Manual del servidor sobre Cadenas de conexión.
Para probar si puedes conectarte a tu servidor, reemplaza la cadena de conexión con tu cadena de conexión de localhost en el ejemplo de código anterior.
Conectarse a un set de réplicas
Una implementación de set de réplicas de MongoDB es un grupo de instancias conectadas que almacenan el mismo conjunto de datos. Esta configuración proporciona redundancia de datos y alta disponibilidad de datos.
Para conectarse a una implementación de set de réplicas, especifique el nombre de host y los números de puerto de cada instancia, separados por comas, y el nombre del set de réplicas como el valor del parámetro replicaSet en la cadena de conexión. En el siguiente ejemplo, los nombres de host son host1, host2 y host3, y los números de puerto son todos 27017. El nombre del set de réplicas es myRS.
mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=myRS
Cuando se conecta a un set de réplicas, el driver realiza las siguientes acciones por defecto:
Descubre todos los nodos del conjunto de réplicas cuando se le proporciona la dirección de cualquiera de los nodos.
Envía las operaciones al nodo adecuado, como las instrucciones para guardar contra el primario.
Tip
Puedes especificar solo un host para conectarte a un set de réplicas. Sin embargo, para garantizar la conectividad cuando el host especificado no esté disponible, deberías proporcionar la lista completa de hosts.
directConnection
Para forzar operaciones en el host designado en el URI de conexión, especifique la opción directConnection. Conexiones directas:
No soporte cadenas SRV.
Fallar en las escrituras cuando el host especificado no es el primario.
Requieren que especifiques una preferencia de lectura secundaria cuando el host especificado no sea el primario.
Nota
Set de réplicas en Docker
Cuando un set de réplicas se ejecuta en Docker, se podría exponer solo un punto final de MongoDB. En este caso, el set de réplicas no se puede detectar. Si se especifica directConnection=false en la URI de conexión, o se deja esta opción sin configurar, puedes evitar que tu aplicación se conecte a ella.
En un entorno de prueba o desarrollo, se puede conectar al set de réplicas especificando directConnection=true. En un entorno de producción, se recomienda configurar el clúster para que cada instancia de MongoDB sea accesible fuera de la red virtual de Docker.
Opciones de conexión
Esta sección explica varias opciones comunes de conexión y autenticación de MongoDB. Puede pasar las opciones de conexión como parámetros del URI de conexión para especificar el comportamiento del cliente.
Nombre de la opción | Tipo | Valor por defecto | Descripción |
|---|---|---|---|
timeoutMS | entero |
| Se especifica el número de milisegundos que una sola operación que se ejecuta en el |
connectTimeoutMS | entero |
| Especifica la cantidad de milisegundos que se debe esperar antes de una interrupción en una conexión TCP. |
maxPoolSize | entero |
| Especifica el número máximo de conexiones que un pool de conexiones puede tener en un momento dado. |
replicaSet | string |
| Especifica el nombre del set de réplicas para el clúster. Todos los nodos del set de réplicas deben tener el mismo nombre de set de réplicas, o el cliente no los considerará parte del set. |
maxIdleTimeMS | entero |
| Especifica el tiempo máximo que una conexión puede permanecer inactiva en el pool de conexiones antes de ser eliminada y cerrada. El valor por defecto es |
minPoolSize | entero |
| Especifica el número mínimo de conexiones que el driver mantiene en un solo pool de conexiones. |
socketTimeoutMS | entero |
| Especifica el número de milisegundos que se debe esperar para que una lectura o guardado del socket regrese antes de devolver un error de red. El valor por defecto de |
serverSelectionTimeoutMS | entero |
| Especifica el número de milisegundos que se espera para encontrar un servidor disponible y adecuado para ejecutar una operación. |
heartbeatFrequencyMS | entero |
| Especifica el número de milisegundos a esperar entre las comprobaciones periódicas del servidor en segundo plano. |
tls | booleano |
| Especifica si se debe establecer una conexión de Seguridad de la capa de transporte (TLS) con la instancia. Esto se establece automáticamente en |
w | string o número entero |
| Especifica el nivel de confirmación de escritura (write concern). Para obtener más información sobre los valores, consulta la documentación del servidor en Opciones de nivel de confirmación de escritura (write concern). |
directConnection | booleano |
| Especifica si se debe forzar el despacho de todas las operaciones al host especificado en el URI de conexión. |
Para obtener una lista completa de las opciones de conexión, consulta la documentación del API de ClientOptions.
Ajuste de tiempo de espera único
Puede establecer una única opción de Timeout en su Client para determinar la cantidad de tiempo que una operación única puede tardar en ejecutarse utilizando el método SetTimeout() o especificando la opción timeoutMS en la cadena URI de su conexión. Database, Collection, Session, ChangeStream y Bucket instancias bajo tu código heredan la opción Timeout de Client, si no estableces un Contexto para operaciones contra la misma entidad.
Si pasas un Contexto a una operación con un plazo límite, el controlador usará ese plazo límite de Contexto para la operación. Si el contexto no tiene fecha límite, el controlador deriva un nuevo Contexto del Contexto dado utilizando la opción Timeout establecida en el Client.
Nota
Reintentos bajo Especificación de Tiempo de Espera
Con la configuración por defecto, si estableces una opción Timeout en el Client y tu operación requiere reintento, el driver reintenta la operación tantas veces como sea posible antes de que expire el tiempo de espera. Una vez que el temporizador de espera expire, el controlador devuelve un error de tiempo de espera. Las versiones 1.1 y posteriores del driver de Go activan la lectura y escritura reintentables por defecto. Para obtener más información, consulta el manual de Servidor sobre lecturas reintentables y escrituras reintentables.
El siguiente código muestra cómo configurar la opción Timeout en un Client con la opción SetTimeout:
opts := options.Client().SetTimeout(5 * time.Second)
El siguiente ejemplo muestra cómo se puede establecer un único tiempo de espera con la opción URI y ejecutar una operación que herede esta configuración:
uri := "mongodb://user:pass@sample.host:27017/?timeoutMS=5000" client := mongo.Connect(context.TODO(), uri) coll := client.Database("<db>").Collection("<collection>") ... coll.InsertOne(context.Background(), doc)
Importante
Opciones de tiempo de espera heredadas
SocketTimeout, wTimeout, MaxTime, y MaxCommitTime serán obsoletos en una próxima versión. El software controlador ignora MaxTime y MaxCommitTime si configuras Timeout. El controlador sigue respetando SocketTimeout y wTimeout, pero estas configuraciones pueden resultar en un comportamiento indefinido. Considera usar solo la opción de tiempo de espera único en su lugar.