Menu Docs
Página inicial do Docs
/ / /
Go
/ /

Guia de conexão

Nesta página

  • Visão geral
  • URI de conexão
  • Outras maneiras de se conectar ao MongoDB
  • Opções de conexão

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: o serviço fully managed para implantações do MongoDB na cloud

  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

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.

O exemplo a seguir explica cada parte de um exemplo de URI de conexão:

Cada parte da connection string

Neste exemplo, usamos mongodb para o protocolo, que especifica o formato de cadeias de conexão padrão. Você também pode usar o formato de conexão de seed list de DNS caso deseje mais flexibilidade de implantação e a capacidade de alterar os servidores em rotação sem reconfigurar os clientes.

A próxima parte da cadeia de conexão contém seu nome de usuário e, se você estiver usando autenticação por senha, a própria senha. Substitua o valor de user pelo seu nome de usuário e pass pela sua 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 cadeia 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.

Para se conectar ao MongoDB, você precisa criar um cliente. Um cliente gerencia conexões e executa comandos de banco de dados 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 Client tipo é seguro para uso concorrente por várias goroutines. Para saber mais sobre como os pool de conexões funcionam no driver, consulte apá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 Conectar().

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:

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.

Observação

Para saber mais sobre como se conectar ao Atlas sem servidor, consulte a página Limitações da instância sem servidor para identificar a versão mínima de driver necessária.

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.

Se você precisar executar um servidor MongoDB em seu computador local para fins de desenvolvimento, será necessário concluir o seguinte:

  1. Baixe a versão Comunidade ou Enterprise do MongoDB Server.

  2. Instale e configure o servidor MongoDB.

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

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ê só precisa especificar 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.

Para forçar operações no host designado no URI de conexão, especifique a opção directConnection. As conexões diretas:

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
null
Especifica o número de milissegundos que uma única operação executada no Client pode levar antes de retornar um erro de tempo limite. As operações honram esta configuração somente quando não há prazo no contexto da operação.
connectTimeoutMS
inteiro
30000
Define o tempo de espera em milissegundos antes de uma conexão TCP atingir o tempo limite.
maxPoolSize
inteiro
100
Define o limite máximo de conexões que um pool de conexões pode ter em um determinado momento.
replicaSet
string
null
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
0
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 é 0, o que significa que uma conexão pode ficar inativa por tempo indeterminado.
minPoolSize
inteiro
0
Especifica o número mínimo de conexões que o driver mantém em um único pool de conexões.
socketTimeoutMS
inteiro
0
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 0 significa que não existe um limite de tempo.
serverSelectionTimeoutMS
inteiro
30000
Especifica o número de milissegundos de espera para encontrar um servidor disponível e adequado para executar uma operação.
heartbeatFrequencyMS
inteiro
10000
Define o intervalo de tempo em milissegundos para esperar, entre cada verificação periódica do servidor em segundo plano.
tls
booleano
false
Especifica se uma conexão TLS (Transport Layer Security) deve ser estabelecida com a instância. Isso é automaticamente definido como true ao usar um seedlist de DNS (SRV) na cadeia de conexão. Você pode substituir esse comportamento definindo o valor como false.
w
string ou inteiro
null
Define a preocupação de gravação. Para saber mais sobre os valores, consulte a seção Opções de preocupação de gravaçãona documentação do servidor:
directConnection
booleano
false
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.

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

Com as configurações padrão, se você definir uma opção Timeout no seu Client e sua operação exigir uma nova tentativa, o driver tentará novamente a operação quantas vezes forem possíveis antes que o tempo limite expire. Quando o tempo limite expira, o driver retorna um erro de tempo limite. Versões 1.1 e posterior do driver Go permitem leituras e gravações repetíveis por padrão. Consulte o manual do servidor para obter mais informações sobre leituras repetíveis e gravações repetíveis.

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

Voltar

Conexões