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.
Puede utilizar el controlador Go para conectarse 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
Una URI de conexión, también conocida como cadena de conexión, le dice al controlador cómo conectarse a MongoDB y cómo comportarse mientras está conectado.
Partes de una URI de conexión
El siguiente ejemplo explica cada parte de una 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 puede usar el formato de conexión de lista de semillas DNS si desea mayor flexibilidad de implementación y la posibilidad de cambiar los servidores en rotación sin reconfigurar los clientes.
La siguiente parte de la cadena de conexión contiene el nombre de usuario de la base de datos y, si utiliza autenticación basada en contraseña, su contraseña. Reemplace el valor user con el nombre de usuario de la base de datos y pass con su contraseña. Si utiliza un mecanismo de autenticación que no requiere nombre de usuario ni contraseña, omita 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 su instancia de MongoDB. En el ejemplo anterior, usamos sample.host como nombre de host y 27017 como puerto. Reemplace estos valores para apuntar a su instancia de MongoDB.
La última parte de la cadena de conexión especifica las opciones de conexión y autenticación. En el ejemplo, se establecen dos opciones de conexión: maxPoolSize=20 w=majorityy. Para obtener más información sobre las opciones de conexión, consulte la sección "Opciones de conexión" de esta guía.
Ejemplo de conexión
Para conectarse a MongoDB, debe crear un cliente. Un cliente administra sus conexiones y ejecuta comandos de la base de datos.
Tip
Reutilizar el cliente
Recomendamos reutilizar su cliente en diferentes sesiones y operaciones. Puede usar la misma Client instancia para realizar varias tareas, en lugar de crear una nueva cada vez. El Client tipo es seguro para el uso simultáneo de varias go-rutinas. Para obtener más información sobre el funcionamiento de los grupos de conexiones en el controlador, consulte 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 la URI de conexión, pásela al método ApplyURI(), que devuelve una nueva instancia ClientOptions. Para configurar otras opciones, llame al método auxiliar correspondiente del paquete options.
Para obtener más información sobre las opciones de conexión, consulte la sección "Opciones de conexión". Para obtener más información sobre cómo crear un cliente, consulte la documentación de la API de Cliente y Connect().
Puedes configurar la versión estable de la API como opción para evitar cambios importantes al actualizar a una nueva versión del servidor. Para obtener más información sobre la función API estable, consulta la página API estable.
El siguiente código muestra cómo crear un cliente que use una cadena de conexión Atlas y la versión API estable, conectarse a MongoDB y verificar que la conexión sea 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 se conecta a una única instancia de servidor MongoDB o un conjunto de réplicas que no está alojado en Atlas, consulte las siguientes secciones para saber cómo conectarse.
Realizar la conexión a MongoDB Server en la máquina local
Si debe ejecutar un servidor MongoDB en su máquina local para fines de desarrollo, complete 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 desea especificar un nombre de host o una dirección IP diferente, consulte nuestra entrada del Manual del servidor sobre cadenas de conexión.
Para probar si puede conectarse a su servidor, reemplace la cadena de conexión con la cadena de conexión de su host local en el ejemplo de código anterior.
Conectarse a un set de réplicas
Una implementación de un conjunto de réplicas de MongoDB es un grupo de instancias conectadas que almacenan el mismo conjunto de datos. Esta configuración proporciona redundancia y alta disponibilidad de datos.
Para conectarse a una implementación de conjunto de réplicas, especifique el nombre de host y los números de puerto de cada instancia, separados por comas, y el nombre del conjunto de réplicas como 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 27017. El nombre del conjunto de réplicas es myRS.
mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=myRS
Al conectarse a un conjunto de réplicas, el controlador realiza las siguientes acciones de forma predeterminada:
Descubre todos los miembros del conjunto de réplicas cuando se le proporciona la dirección de cualquiera de los miembros.
Envía operaciones al miembro apropiado, como instrucciones para escribir contra el principal.
Tip
Puede especificar solo un host para conectarse a un conjunto de réplicas. Sin embargo, para garantizar la conectividad cuando el host especificado no esté disponible, debe proporcionar la lista completa de hosts.
Conexión directa
Para forzar operaciones en el host designado en la URI de conexión, especifique la opción directConnection. Conexiones directas:
No se admiten cadenas SRV.
Error en las escrituras cuando el host especificado no es el principal.
Requerir que especifique una preferencia de lectura secundaria cuando el host especificado no es el principal.
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 |
| Especifica el número de milisegundos que una sola operación ejecutada en |
connectTimeoutMS | entero |
| Especifica la cantidad de milisegundos que se deben esperar antes de que se agote el tiempo de espera en una conexión TCP. |
maxPoolSize | entero |
| Especifica el número máximo de conexiones que un grupo de conexiones puede tener en un momento determinado. |
replicaSet | string |
| Especifica el nombre del conjunto de réplicas del clúster. Todos los nodos del conjunto de réplicas deben tener el mismo nombre; de lo contrario, el cliente no los considerará parte del conjunto. |
maxIdleTimeMS | entero |
| Especifica el tiempo máximo que una conexión puede permanecer inactiva en el grupo de conexiones antes de ser eliminada y cerrada. El valor predeterminado es |
minPoolSize | entero |
| Especifica el número mínimo de conexiones que el controlador mantiene en un solo grupo de conexiones. |
socketTimeoutMS | entero |
| Especifica el número de milisegundos que se deben esperar para que una lectura o escritura del socket regrese antes de que se devuelva un error de red. El valor predeterminado |
Tiempo de espera de selección del servidor MS | 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 la cantidad de milisegundos que se debe esperar entre 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. Este valor se establece automáticamente en |
w | cadena o 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, consulte la documentación de la API ClientOptions.
Configuración de tiempo de espera único
Puede configurar una única opción Timeout en su Client para controlar la cantidad de tiempo que puede tardar en ejecutarse una sola operación utilizando el método SetTimeout() o especificando la opción timeoutMS en su cadena URI de conexión. Las instancias Database, Collection, Session, ChangeStream y Bucket en otras partes de su código heredan la opción Timeout de Client si no configura un Contexto para operaciones contra la misma entidad.
Si se pasa un contexto a una operación con fecha límite, el controlador utiliza dicha fecha límite para la operación. Si el contexto no tiene fecha límite, el controlador deriva un nuevo contexto a partir del contexto dado utilizando la opción Timeout establecida en Client.
Nota
Reintentos bajo Especificación de Tiempo de Espera
Con la configuración predeterminada, si configura la Timeout opción en su Client y la operación requiere un reintento, el controlador reintenta la operación tantas veces como sea posible antes de que se agote el tiempo de espera. Una vez agotado, el controlador devuelve un error de tiempo de espera. Las versiones 1.1 y posteriores del controlador Go habilitan las lecturas y escrituras reintentables de forma predeterminada. Consulte el manual del servidor para obtener más información sobre las lecturas y escrituras reintentables.
El siguiente código muestra cómo establecer 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
SocketTimeoutwTimeout, MaxTime y MaxCommitTime quedarán obsoletos en una próxima versión. El controlador ignora MaxTime y MaxCommitTime si se configura Timeout. El controlador aún respeta SocketTimeout y wTimeout, pero estas configuraciones pueden generar un comportamiento indefinido. Considere usar solo la opción de tiempo de espera único.