Visão geral
Neste guia, você aprenderá como se conectar a uma instância do MongoDB ou a uma implantação de conjunto de réplicas usando o driver Go.
Você pode usar o driver Go para se conectar a implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: the fully managed service for MongoDB deployments in the cloud
MongoDB Enterprise: the subscription-based, self-managed version of MongoDB
MongoDB Community: the source-available, free-to-use, and self-managed version of MongoDB
URI de conexão
Um URI de conexão, também conhecido como cadeia de conexão, informa ao driver como se conectar ao MongoDB e como se comportar enquanto estiver conectado.
Partes de um URI de conexão
O exemplo a seguir explica cada parte de um exemplo de URI de conexão:

In this example, we use mongodb for the protocol, which specifies the Standard Connection String Format. You can also use the DNS Seed List Connection Format if you want more flexibility of deployment and the ability to change the servers in rotation without reconfiguring clients.
A próxima parte da string de conexão contém seu nome de usuário do banco de dados e, se você estiver usando autenticação baseada em senha, a própria senha. Substitua o valor de user pelo nome de usuário do banco de dados e pass pela senha. Se você estiver usando um mecanismo de autenticação que não requer um nome de usuário e senha, omita esta parte do URI de conexão.
A próxima parte da cadeia de conexão especifica o nome do host ou o endereço IP e a porta da instância do MongoDB. No exemplo anterior, usamos sample.host como nome de host e 27017 como porta. Substitua esses valores para apontar para a sua instância MongoDB.
A última parte da string de conexão especifica as opções de conexão e autenticação. No exemplo, definimos duas opções de conexão: maxPoolSize=20 e w=majority. Para saber mais sobre as opções de conexão, leia a seção Opções de conexão deste guia.
Exemplo de conexão
Para se conectar ao MongoDB, você deve criar um cliente. Um cliente gerencia conexões e executa comandos de banco de dados.
Dica
Reutilize seu cliente
Recomendamos que você reutilize seu cliente entre sessões e operações. Você pode utilizar a mesma instância do Client para executar múltiplas tarefas, em vez de criar outra a cada vez. O tipo Client é seguro para uso concorrente por várias goroutines. Para saber mais sobre como os pools de conexões funcionam no driver, consulte a página de perguntas frequentes .
Você pode criar um cliente que use sua cadeia de conexão e outras opções do cliente passando um objeto ClientOptions para o método Connect().
Para especificar seu URI de conexão, passe-o para o método ApplyURI(), que retorna uma nova instância do ClientOptions. Para definir quaisquer outras opções, chame o método assistente relevante a partir do pacote options.
Para saber mais sobre as opções de conexão, consulte a seção Opções de conexão. Para saber mais sobre como criar um cliente, consulte a documentação da API para Cliente e Connect().
Você pode definir a versão da Stable API como uma opção para evitar alterações interruptivas ao atualizar para uma nova versão do servidor. Para saber mais sobre o recurso Stable API, consulte a página Stable API.
O código a seguir mostra como você pode criar um cliente que utiliza uma cadeia de conexão do Atlas e a versão da Stable API, conectar-se ao MongoDB e verificar se a conexão foi bem-sucedida:
// 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!") }
Dica
Siga o Guia de início rápido para recuperar sua cadeia de conexão do Atlas.
Outras maneiras de se conectar ao MongoDB
Se estiver se conectando a uma única instância ou conjunto de réplicas do servidor MongoDB que não esteja hospedado no Atlas, consulte as seções a seguir para saber como se conectar.
Conecte-se a um servidor MongoDB em sua máquina local
Se você precisa executar um servidor MongoDB em sua máquina local para fins de desenvolvimento, complete as seguintes etapas:
Download the Community or Enterprise version of MongoDB Server.
Instale e configure o servidor MongoDB.
Inicie o servidor.
Importante
Sempre proteja seu servidor do MongoDB contra ataques maliciosos. Consulte nossa Lista de verificação de segurança para obter uma lista de recomendações de segurança.
Depois de iniciar com êxito o servidor MongoDB, especifique a connection string no código de conexão do driver.
Se o servidor MongoDB estiver sendo executado localmente, você poderá usar a connection string "mongodb://localhost:<port>", em que <port> é o número da porta que você configurou no servidor para escutar as conexões de entrada.
Se você quiser especificar um nome de host ou endereço IP diferente, consulte a entrada do Manual do servidor sobre strings de conexão.
Para testar se você pode se conectar ao servidor, substitua a cadeia de conexão pela do localhost no exemplo de código anterior.
Conectar a um conjunto de réplicas
Uma implantação do conjunto de réplicas MongoDB é um grupo de instâncias conectadas que armazenam o mesmo conjunto de dados. Esta configuração fornece redundância de dados e alta disponibilidade de dados.
Para conectar a uma implantação do conjunto de réplicas, especifique o nome do host e os números de porta de cada instância, separados por vírgulas, e o nome do conjunto de réplicas como o valor do parâmetro replicaSet na cadeia de conexão. No exemplo seguinte, os nomes de host são host1, host2 e host3, e os números de porta são todos 27017. O nome do conjunto de réplicas é myRS.
mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=myRS
Ao se conectar a um conjunto de réplicas, o driver realiza as seguintes ações por padrão:
Descobre todos os membros do conjunto de réplicas quando recebe o endereço de qualquer membro.
Despacha operações para o membro apropriado, como instruções para gravar no primário.
Dica
Você pode especificar apenas um host para se conectar a um conjunto de réplicas. No entanto, para garantir a conectividade quando o host especificado não estiver disponível, forneça a lista completa de hosts.
Conexão direta
Para forçar operações no host designado no URI de conexão, especifique a opção directConnection. As conexões diretas:
Não oferecem suporte a strings SRV.
Falham nas gravações quando o host especificado não é o primário.
Exigem que você especifique uma preferência de leitura secundária quando o host especificado não é o primário.
Observação
Conjunto de réplicas no Docker
Quando um conjunto de réplicas é executado no Docker, ele pode expor apenas um endpoint MongoDB . Nesse caso, o conjunto de réplicas não é detectável. Especificar directConnection=false em seu URI de conexão ou deixar essa opção sem definir pode impedir que seu aplicação se conecte a ele.
Em um ambiente de teste ou desenvolvimento, é possível conectar-se ao conjunto de réplicas especificando directConnection=true. Em um ambiente de produção, recomendamos configurar o cluster para que cada instância do MongoDB seja acessível fora da rede virtual do Docker.
Opções de conexão
Esta seção explica várias opções comuns de conexão e autenticação do MongoDB. Você pode passar as opções de conexão como parâmetros do URI de conexão para especificar o comportamento do cliente.
Nome da opção | Tipo | Valor padrão | Descrição |
|---|---|---|---|
timeoutMS | inteiro |
| Especifica o número de milissegundos que uma única operação executada no |
connectTimeoutMS | inteiro |
| Define o tempo de espera em milissegundos antes de uma conexão TCP atingir o tempo limite. |
maxPoolSize | inteiro |
| Define o limite máximo de conexões que um pool de conexões pode ter em um determinado momento. |
replicaSet | string |
| Especifica o nome do conjunto de réplicas para o cluster. Todos os nós no conjunto de réplicas precisam ter o mesmo nome do conjunto de réplicas, caso contrário o cliente não os considerará como parte do conjunto. |
maxIdleTimeMS | inteiro |
| Define o limite de tempo máximo que uma conexão pode ficar inativa no pool de conexões antes de ser eliminada e fechada. O padrão é |
minPoolSize | inteiro |
| Especifica o número mínimo de conexões que o driver mantém em um único pool de conexões. |
socketTimeoutMS | inteiro |
| Define um limite de tempo em milissegundos para esperar por uma resposta de leitura ou gravação de soquete antes de retornar um erro de rede. O valor padrão |
serverSelectionTimeoutMS | inteiro |
| Especifica o número de milissegundos de espera para encontrar um servidor disponível e adequado para executar uma operação. |
heartbeatFrequencyMS | inteiro |
| Define o intervalo de tempo em milissegundos para esperar, entre cada verificação periódica do servidor em segundo plano. |
tls | booleano |
| Especifica se uma conexão TLS (Transport Layer Security) deve ser estabelecida com a instância. Isso é automaticamente definido como |
w | string ou inteiro |
| Specifies the write concern. To learn more about values, see the server documentation on Write Concern options. |
directConnection | booleano |
| Especifica se todas as operações devem ser forçadas a serem despachadas para o host especificado no URI de conexão. |
Para obter uma lista completa das opções de conexão, consulte a documentação da API ClientOptions.
Definição de tempo limite único
Você pode definir uma única opção Timeout em seu Client para controlar o tempo que uma única operação pode levar para ser executada usando o método SetTimeout() ou especificando a opção timeoutMS em sua string URI de conexão. As instâncias Database, Collection, Session, ChangeStream e Bucket em outras partes do seu código herdarão a opção Timeout de Client se você não definir um contexto para operações na mesma entidade.
Se você fornecer um contexto para uma operação com um prazo específico, o driver usará esse prazo de contexto para a operação. Se não houver um prazo específico, o driver criará um novo contexto a partir do contexto fornecido, usando a opção Timeout definida em Client.
Observação
Novas tentativas com especificação de tempo limite
With default settings, if you set a Timeout option on your Client and your operation requires a retry, the driver retries the operation as many times as possible before the timeout expires. Once the timeout expires, the driver returns a timeout error. Versions 1.1 and later of the Go driver enable retryable reads and writes by default. See the Server manual for more information about retryable reads and retryable writes.
O código a seguir mostra como definir a opção Timeout em um Client com a opção SetTimeout:
opts := options.Client().SetTimeout(5 * time.Second)
O exemplo a seguir mostra como definir um tempo limite único com a opção URI e executar uma operação que herda esta configuração:
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
Opções herdadas de tempo limite
SocketTimeoutwTimeout, MaxTime e MaxCommitTime serão descontinuados em uma versão futura. O driver ignora MaxTime e MaxCommitTime quando Timeout está definido. O driver ainda honra SocketTimeout e wTimeout, mas essas configurações podem resultar em um comportamento indefinido. Em vez disso, considere usar apenas a opção de tempo limite único.