MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

String de conexão no MongoDB (com exemplos)


Para que os aplicativos se conectem a um servidor de banco de dados, eles devem usar uma cadeia de conexão, que é uma expressão que contém todos os parâmetros necessários. As cadeias de conexão fornecem a instância do servidor, nome do banco de dados, detalhes de autenticação e outros parâmetros para interagir com o servidor de banco de dados.

Formatos para strings de conexão


Qualquer um dos métodos fornecidos configurará uma string de conexão do MongoDB. O formato de conexão da lista de sementes DNS ou o formato de cadeia de conexão padrão.

O formato padrão para conectar strings


Existem três tipos básicos de implantações do MongoDB:autônomo, conjunto de réplicas e cluster fragmentado, todos descritos aqui.

Essa é a maneira típica de unir URIs.
mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

Exemplos:
Independente
mongodb://mongodb0.example.com:27017
Independente que reforça o controle de acesso:
mongodb://myDBReader:D1fficultP%[email protected]:27017/?authSource=admin
Conjunto de réplicas
mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl
Conjunto de réplicas que aplica o controle de acesso:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?authSource=admin&replicaSet=myRepl
Cluster fragmentado
mongodb://mongos0.example.com:27017,mongos1.example.com:27017,mongos2.example.com:27017
Cluster fragmentado que impõe controle de acesso:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongos1.example.com:27017,mongos2.example.com:27017/?authSource=admin

Componentes de uma string de conexão


Componentes da string de conexão URI padrão:
  1. mongodb:// – Um prefixo necessário indicando uma string de conexão padrão.
  2. nome de usuário:senha@ – As credenciais de autenticação são opcionais. Se o authSource for fornecido, o cliente tentará autenticar o usuário. Sem especificar um authSource, o cliente verificará o usuário em relação ao defaultauthdb. Além disso, o banco de dados admin é usado se o defaultauthdb não for fornecido.
  3. host[:port] – O host (e opcionalmente o número da porta) no qual a instância mongod está operando (ou instância mongos no caso de um cluster fragmentado). Você pode indicar um nome de host, um endereço IP ou um soquete em um domínio UNIX. Indique o número de hosts necessários para sua topologia de distribuição:
    No caso de uma única instância mongod, forneça o nome do host da instância mongod.
    Forneça o(s) nome(s) de host da(s) instância(s) mongod especificada(s) nas configurações do conjunto de réplicas para um conjunto de réplicas.
    Indique os nomes de host da instância do mongos para um cluster fragmentado. Sem especificar um número de porta, a porta genérica 27017 é utilizada.
  4. /defaultauthdb – Opcional. Se a cadeia de conexão contiver credenciais username:password@, mas a opção authSource não for fornecida, o banco de dados de autenticação será usado. O cliente usa o banco de dados admin para autenticar o usuário se authSource e defaultauthdb não forem fornecidos.
  5. ? Opcional. Os parâmetros específicos da conexão são especificados nos pares name>=value> na string de consulta. A lista de opções disponíveis pode ser vista na seção Connection String Options. A barra (/) deve ser incluída entre o host e o ponto de interrogação (?) para iniciar a string de opções se nenhum banco de dados for especificado na string de conexão.

Formato de conexão para a lista de sementes DNS


Há também uma lista de sementes construída por DNS para conexões MongoDB. O uso do DNS para criar a lista de servidores acessíveis oferece mais flexibilidade de implantação e a capacidade de alternar servidores em ciclos sem reconfigurar os clientes.

Use o prefixo mongodb+srv em vez do prefixo regular da cadeia de conexão MongoDB para usar a lista de sementes DNS. Para informar ao usuário que o nome do host a seguir é um registro DNS SRV, use o prefixo +srv. Depois, o mongosh ou driver consultará o sistema de nomes de domínio (DNS) para descobrir quais hosts estão executando as instâncias do mongod.

Observação: A opção tls (ou o ssl correspondente) é definida como true se a variável de string de conexão +srv for usada. Ao especificar explicitamente a opção tls como false na string de consulta, você pode substituir esse comportamento e usar tls=false.

As cadeias de conexão da lista de sementes DNS geralmente se parecem com o exemplo a seguir:
mongodb+srv://server.example.com/

A configuração do DNS pode ficar assim:
Record                            TTL   Class    Priority Weight Port  Target

_mongodb._tcp.server.example.com. 86400 IN SRV   0        5      27317 mongodb1.example.com.

_mongodb._tcp.server.example.com. 86400 IN SRV   0        5      27017 mongodb2.example.com.

A conexão com membros da lista de sementes fornece aos clientes acesso a um diretório de outros membros do conjunto de réplicas para estabelecer uma conexão. O host pode produzir uma lista de servidores diferente da lista de sementes, pois os clientes geralmente utilizam aliases de DNS em suas listas de sementes. Os membros do conjunto de réplicas só podem ser acessados ​​por meio de seus nomes de host; portanto, se isso ocorrer, os usuários usarão os nomes de host fornecidos pela replicação em vez daqueles declarados na lista de sementes.

Observação: Os registros SRV fornecidos pelo nome de host especificado devem ter o mesmo domínio pai (example.com) que o próprio nome de host. Você não terá permissão para se conectar se os domínios pai e os nomes de host não corresponderem.

Além disso, as cadeias de conexão da lista de sementes DNS permitem que você forneça parâmetros como parte de uma URL da mesma forma que as comuns. Você também pode usar um registro TXT para indicar as seguintes configurações ao usar uma string de conexão da lista de seed DNS:
authSource
replicaSet

Apenas um registro TXT pode ser especificado para cada instância do mongod. O cliente retornará um erro se o DNS tiver várias entradas TXT ou se a entrada TXT contiver um atributo diferente de replicaSet ou authSource.

O registro TXT para server.example.com ficaria assim:
Record              TTL   Class    Text

server.example.com. 86400 IN TXT   "replicaSet=mySet&authSource=authDB"

Essa string de conexão é gerada a partir das entradas DNS SRV, bem como das configurações do registro TXT da seguinte forma:
mongodb://mongodb1.example.com:27317,mongodb2.example.com:27017/?replicaSet=mySet&authSource=authDB

As opções de um registro TXT podem ser substituídas fornecendo o parâmetro de string de consulta da URL. A string de consulta no cenário a seguir substitui a opção authSource definida no registro TXT da entrada DNS.
mongodb+srv://server.example.com/?connectTimeoutMS=300000&authSource=aDifferentAuthDB

Usando a substituição authSource, a string de conexão típica ficaria assim:
mongodb://mongodb1.example.com:27317,mongodb2.example.com:27017/?connectTimeoutMS=300000&replicaSet=mySet&authSource=aDifferentAuthDB

Observação: Se o nome do host especificado na string de conexão não tiver nenhum registro DNS associado a ele, o parâmetro mongodb+srv falhará. Como última observação, ao usar a modificação da cadeia de conexão +srv, a opção de utilizar TLS (ou a segurança SSL equivalente) é definida como verdadeira para a conexão. Ao especificar explicitamente a opção tls como false na string de consulta, você pode substituir esse comportamento e usar tls=false.

Obtenha sua string de conexão do MongoDB


Você precisará de uma string URI para se conectar ao MongoDB. Se você vincular a uma implantação do MongoDB usando o shell do mongo, o Compass ou os drivers do MongoDB, será solicitado o URI (Uniform Resource Identifier).

Presume-se que você já configurou a autenticação no MongoDB e gerou um nome de usuário e senha para direitos de leitura e gravação em um banco de dados MongoDB ao usar a string URI fornecida.

Nesse caso, você pode usar o login e a senha que criou para a função readWriteAnyDatabase, bem como o nome do banco de dados do administrador na string de conexão para se conectar ao MongoDB.

Opções para a cadeia de conexão


Esta seção explica as várias maneiras pelas quais você pode se conectar à Internet.
  1. Na forma de um par nome=valor, as opções de conexão estão disponíveis.
  2. Ao utilizar um driver, o nome da opção não diferencia maiúsculas de minúsculas.
  3. O nome da opção não diferencia maiúsculas de minúsculas ao usar o mongosh ou o shell mongo tradicional (versão 4.2 ou posterior).
  4. O nome da opção diferencia maiúsculas de minúsculas ao usar um shell mongo herdado da versão 4.0 ou anterior.
  5. O caso nunca é um problema ao exibir o valor.

A letra e comercial (&) pode separar escolhas, como name1=value1&name2=value2. Os parâmetros ReplicaSet e connectTimeoutMS estão incluídos na seguinte conexão:
mongodb://db1.example.net:27017,db2.example.net:2500/?replicaSet=test&connectTimeoutMS=300000

Observação: Os drivers agora aceitam ponto e vírgula (;) como separadores de opções para preservar a compatibilidade com software mais antigo.

Exemplos de strings de conexão


Você encontrará exemplos de URI para pontos de conexão populares nos exemplos abaixo.
Execute o servidor de banco de dados localmente

A porta padrão de um servidor de banco de dados local pode ser usada para estabelecer uma conexão com o seguinte comando:
mongodb://localhost
Banco de dados administrativo

Para efetuar login no banco de dados admin como foss com a senha fosslinux, os seguintes comandos devem ser seguidos:
mongodb://foss:fosslinux@localhost
Um banco de dados de registros

Conectando e efetuando login no banco de dados de registros usando a senha fosslinux como administrador do sistema.
mongodb://foss:fosslinux@localhost/records
Soquetes de domínio no UNIX

Ao se conectar a um soquete de domínio UNIX, use uma string de conexão criptografada de URL.

O MongoDB vincula-se a um endpoint de domínio UNIX com o seguinte caminho:
mongodb://%2Ftmp%2Fmongodb-27017.sock

Observação: todos os drivers não suportam soquetes de domínio UNIX. Para saber mais sobre seu driver, vá para a seção de documentação do driver.
Réplica definida com usuários em máquinas distintas

Abaixo está uma conexão com uma réplica de dois membros definida em db1.example.net e db2.example.net:
mongodb://db1.example.net,db2.example.com/?replicaSet=test

Observação: As instâncias do mongod fornecidas na configuração do conjunto de réplicas devem ser especificadas para um conjunto de réplicas.
Conjunto de réplicas com usuários no host local

As portas 27017, 27018 e 27019 são usadas para estabelecer uma conexão com um conjunto de réplicas operando em localhost:
mongodb://localhost,localhost:27018,localhost:27019/?replicaSet=test
Conjunto de réplicas de distribuição de leitura

Conectar-se a um conjunto de réplicas de três membros e distribuir leituras para os membros secundários envolve o método listado abaixo:
mongodb://example1.com,example2.com,example3.com/?replicaSet=test&readPreference=secondary
Conjunto de réplicas de preocupação de gravação de alto nível

A conexão a um conjunto de réplicas contendo preocupação de gravação e um tempo limite de dois segundos enquanto aguarda a replicação na maioria dos membros votantes com dados é realizada usando esta configuração:
mongodb://example1.com,example2.com,example3.com/?replicaSet=test&w=majority&wtimeoutMS=2000
Agrupamento compartilhado

É possível se conectar a um cluster fragmentado de várias instâncias usando o seguinte:
mongodb://router1.example.com:27017,router2.example2.com:27017,router3.example3.com:27017/
Cluster do Atlas MongoDB

O seguinte estabelece uma conexão com um cluster do MongoDB Atlas usando credenciais do AWS IAM para autenticação:
mongosh 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS'

Este exemplo mostra como utilizar o método de autenticação MONGODB-AWS e o $external authSource para se conectar ao Atlas por meio de credenciais do AWS IAM.

O valor do AWS SESSION TOKEN authMechanismProperties deve ser fornecido se você estiver utilizando um token de sessão da AWS, da seguinte forma:
mongosh 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<aws session token>'

Observação: Desde que o ID da chave de acesso da AWS ou a Chave de acesso secreta contenha qualquer um dos seguintes caracteres:(: / ? # [ ] @ ), você deve usar a codificação de porcentagem para codificá-los.

Você também pode usar variáveis ​​de ambiente regulares do AWS IAM para especificar essas credenciais em sua plataforma. Ao usar a autenticação MONGODB-AWS, o mongosh verifica e verifica se as seguintes variáveis ​​de ambiente estão presentes:
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN

Uma cadeia de conexão não precisa incluir essas credenciais, se configurada.

No shell bash, as seguintes variáveis ​​são definidas no exemplo a seguir:
export AWS_ACCESS_KEY_ID='<aws access key id>'

export AWS_SECRET_ACCESS_KEY='<aws secret access key>'

export AWS_SESSION_TOKEN='<aws session token>'

A sintaxe para estabelecer variáveis ​​de ambiente será diferente em outros shells, portanto, esteja ciente disso. Para mais informações, acesse a documentação da sua plataforma.

O comando a seguir confirmará se determinadas variáveis ​​de ambiente foram definidas ou não:
env | grep AWS

O código a seguir mostra como estabelecer uma conexão com um cluster do MongoDB Atlas usando as variáveis ​​listadas abaixo:
mongosh 'mongodb+srv://cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS'

Isso é tudo que você precisa saber sobre strings de conexão no MongoDB. Esperamos que você tenha achado o guia do artigo útil. Se sim, por favor, deixe uma observação na seção de comentários. Obrigado por ler.