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
/ /

Guía de Conexión

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

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.

El siguiente ejemplo explica cada parte de un URI de conexión de muestra:

Cada parte de la cadena de conexión

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.

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.

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.

Si necesitas ejecutar un servidor MongoDB en tu máquina local para fines de desarrollo, sigue los siguientes pasos:

  1. Descarga la versión Community o Empresa de MongoDB Server.

  2. Instale y configure MongoDB Server.

  3. 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.

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.

Para forzar operaciones en el host designado en el URI de conexión, especifique la opción directConnection. Conexiones directas:

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.

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

null

Se especifica el número de milisegundos que una sola operación que se ejecuta en el Client puede tardar antes de devolver un error de tiempo de espera. Las operaciones respetan esta configuración solo si no hay una fecha límite en el Contexto de la operación.

connectTimeoutMS

entero

30000

Especifica la cantidad de milisegundos que se debe esperar antes de una interrupción en una conexión TCP.

maxPoolSize

entero

100

Especifica el número máximo de conexiones que un pool de conexiones puede tener en un momento dado.

replicaSet

string

null

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

0

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 0, lo que significa que una conexión puede permanecer sin usar indefinidamente.

minPoolSize

entero

0

Especifica el número mínimo de conexiones que el driver mantiene en un solo pool de conexiones.

socketTimeoutMS

entero

0

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 0 indica que no hay un tiempo de espera.

serverSelectionTimeoutMS

entero

30000

Especifica el número de milisegundos que se espera para encontrar un servidor disponible y adecuado para ejecutar una operación.

heartbeatFrequencyMS

entero

10000

Especifica el número de milisegundos a esperar entre las comprobaciones periódicas del servidor en segundo plano.

tls

booleano

false

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 true al utilizar una lista de nodos iniciales DNS (SRV) en la cadena de conexión. Puedes anular este comportamiento configurando el valor en false.

w

string o número entero

null

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

false

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.

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.

Volver

Conexiones

En esta página