Menu Docs
Página inicial do Docs
/ / /
Driver Ruby MongoDB
/

Criando um cliente

Nesta página

  • Usando Mongo::Client
  • Sintaxe de bloco
  • Seleção do reconhecimento de data center
  • Tipos de conexão
  • Conexão de servidor autônomo
  • Conexão do conjunto de réplicas
  • Conexão de Cluster Fragmentado
  • Conexão direta
  • Conexão do balancer de carga
  • Conexão do MongoDB Atlas
  • Conecte-se ao MongoDB Atlas do AWS Lambda
  • Notas de URI do SRV
  • Opções do cliente
  • Opções de Ruby
  • Opções de URI
  • Opções de tempo limite
  • server_selection_timeout
  • socket_timeout
  • connect_timeout
  • max_time_ms
  • wtimeout
  • Conexões TLS
  • Nomes de opção TLS versus SSL
  • Habilitar conexões TLS
  • Especificar certificado TLS do cliente
  • Modificando SSLContext
  • Especificar certificado CA
  • Verificação do OCSP
  • Conexões IPv4/IPv6
  • Configuração de manutenção de atividade TCP
  • Pool de conexões
  • Uso com servidores forking
  • Manipulação manual de bifurcações de processo
  • Solução de problemas
  • Leituras repetíveis
  • Leituras repetíveis e modernas
  • Leituras legadas que podem ser repetidas
  • Desabilitar leituras repetíveis
  • Gravações repetíveis
  • Retryable writes modernas
  • Gravações legadas que podem ser repetidas
  • Desabilitação de retryable writes
  • Exploração madeireira
  • Alterando o nível do registrador
  • Truncamento
  • Compressão
  • Parâmetros da API do servidor
  • Configuração de desenvolvimento
  • Configuração de produção
  • Sinalizadores de recursos

Para se conectar a um MongoDB deployment, crie um objeto Mongo::Client . Forneça uma lista de hosts e opções ou umURI de connection string para o construtor ''Mongo::Client''. O banco de dados selecionado do cliente tem como padrão admin.

Por padrão, o driver detectará automaticamente a topologia usada pelo sistema e se conectará adequadamente.

Para se conectar a uma implantação local autônomo do MongoDB, especifique o host e a porta do servidor. Na maioria dos casos, você também especificaria o nome do reconhecimento de data center ao qual se conectar; se nenhum nome de reconhecimento de data center for especificado, o cliente utilizará o reconhecimento de data center admin :

Mongo::Client.new([ '127.0.0.1:27017' ], database: 'mydb')
# Or using the URI syntax:
Mongo::Client.new("mongodb://127.0.0.1:27017/mydb")

Observação

O nome do host localhost é tratado especialmente pelo driver e será resolvido apenas para endereços IPv4.

Para se conectar ao MongoDB Atlas, especifique o URI de implantação do Atlas:

Mongo::Client.new("mongodb+srv://username:myRealPassword@cluster0.mongodb.net/mydb?w=majority")

O driver descobrirá todos os nós no cluster e se conectará a eles conforme necessário.

Outra maneira de criar um objeto Mongo::Client é usar a sintaxe de bloco:

Mongo::Client.new(...) do |client|
# work with the client
end

Observe que, ao criar um cliente usando essa sintaxe, o cliente é fechado automaticamente após o término da execução do bloco.

Por padrão, o cliente se conectará ao reconhecimento de data center admin .

O banco de dados admin é um banco de dados especial do MongoDB, frequentemente usado para tarefas administrativas e para armazenar dados administrativos, como usuários e roles (embora usuários e roles também possam ser definidos em outros bancos de dados). Em um cluster fragmentado, o banco de dados do admin existe nos servidores de configuração em vez dos servidores de shard. Embora seja possível usar o banco de dados admin para operações comuns (como armazenar dados do aplicativo), isso não é recomendado, e o aplicativo deve especificar explicitamente o banco de dados que deseja usar.

O reconhecimento de data center pode ser especificado durante a construção do Client :

# Using Ruby client options:
client = Mongo::Client.new(['localhost'], database: 'mydb')
# Using a MongoDB URI:
client = Mongo::Client.new('mongodb://localhost/mydb')

Dada uma instância Client , o método use pode ser invocado para obter uma nova instância Client configurada com o reconhecimento de data center especificado:

client = Mongo::Client.new(['localhost'], database: 'mydb')
admin_client = client.use('admin')
# Issue an administrative command
admin_client.database.command(replSetGetConfig: 1).documents.first

Existem outros reconhecimento de data center especiais no MongoDB que devem ser usados somente para os fins declarados:

  • O banco de dados de configuração .

  • O banco de dados local .

  • O banco de banco de dados do $external , que é usado com PLAIN, Kerberos e X.509 mecanismos de autenticação .

Por padrão, o driver descobrirá o tipo de sistema ao qual é instruído a se conectar (exceto para sistemas com balanceamento de carga) e se comportará da maneira que corresponde ao tipo de sistema. As subseções abaixo descrevem como o driver se comporta em cada um dos tipos de implantação, bem como como forçar um comportamento específico, ignorando a detecção automática do tipo de implantação.

Observe que a detecção do tipo de sistema acontece quando o driver recebe a primeira resposta de qualquer um dos servidores aos quais é instruído a se conectar (a menos que o modo de balanceamento de carga seja solicitado, consulte abaixo). O driver permanecerá na topologia descoberta ou configurada mesmo que a implantação subjacente seja substituída por uma de um tipo diferente. Em particular, ao substituir um conjunto de réplicas por um cluster fragmentado no mesmo endereço, a instância do cliente deve ser recriada (por exemplo, reiniciando o aplicativo) para que ele se comunique com o cluster fragmentado.

Atualmente, a descoberta automática de sistemas com balanceamento de carga não é suportada. As implantações com carga balanceada serão tratadas como implantações de seu tipo subjacente, que geralmente seriam clusters fragmentados. O driver não funcionará corretamente ao tratar uma implantação com balanceamento de carga como um cluster fragmentado; portanto, quando a implantação é com balanceamento de carga, o cliente deve ser explicitamente configurado para se conectar a um balanceador de carga.

Se a implantação for um servidor autônomo, também conhecido como autônomo, todas as operações serão direcionadas para o servidor especificado.

Se o servidor for desligado e substituído por um nó do conjunto de réplicas, o driver continuará enviando todas as operações para esse nó, mesmo que o nó seja ou se torne secundário.

Para forçar uma conexão standalone, consulte a seção de conexão direta abaixo.

Ao conectar a um conjunto de réplicas, basta passar o endereço de qualquer nó no conjunto de réplicas para o driver. O nó não precisa ser o primário e pode ser um nó oculto. Em seguida, o driver descobrirá automaticamente os nós restantes.

No entanto, é recomendável especificar todos os nós que fazem parte do conjunto de réplicas, para que, no evento de um ou mais nós indisponíveis (por exemplo, devido a manutenção ou reconfiguração), o driver ainda possa se conectar ao conjunto de réplicas.

Exemplos de conexão do conjunto de réplicas:

Mongo::Client.new([ '127.0.0.1:27017' ], database: 'mydb')
Mongo::Client.new([ '127.0.0.1:27017', '127.0.0.1:27018' ], database: 'mydb')
# Or using the URI syntax:
Mongo::Client.new("mongodb://127.0.0.1:27017,127.0.0.1:27018/mydb")

Para fazer com que o driver verifique o nome do conjunto de réplicas na conexão, passe-o usando a opção Ruby replica_set ou a opção URI replicaSet :

Mongo::Client.new([ '127.0.0.1:27017', '127.0.0.1:27018' ],
database: 'mydb', replica_set: 'myapp')
# Or using the URI syntax:
Mongo::Client.new("mongodb://127.0.0.1:27017,127.0.0.1:27018/mydb?replicaSet=myapp")

Se o sistema não for um conjunto de réplicas ou usar um nome do conjunto diferente, todas as operações falharão (até que o conjunto de réplicas esperado seja retornado pelo servidor).

Também é possível forçar uma conexão de conjunto de réplicas sem especificar o nome do conjunto de réplicas. Fazer isso geralmente é desnecessário e está obsoleto:

Mongo::Client.new([ '127.0.0.1:27017', '127.0.0.1:27018' ],
database: 'mydb', connect: :replica_set)
# Or using the URI syntax:
Mongo::Client.new("mongodb://127.0.0.1:27017,127.0.0.1:27018/mydb?connect=replica_set")

Para se conectar a um MongoDB Atlas cluster que é implantado como um conjunto de réplicas, conecte-se ao URI:

Mongo::Client.new("mongodb+srv://username:myRealPassword@cluster0.mongodb.net/test?w=majority")

Revise as notas de URI SRV se estiver usando URIs SRV.

Para se conectar a um cluster fragmentado , especifique os endereços dos roteadores mongos :

Mongo::Client.new([ '1.2.3.4:27017', '1.2.3.5:27017' ], database: 'mydb')
Mongo::Client.new("mongodb://1.2.3.4:27017,1.2.3.5:27017/mydb")

Note que, ao contrário de uma conexão de conjunto de réplicas, você pode optar por se conectar a um subconjunto dos roteadores mongos existentes no sistema. O driver monitorará cada roteador e usará os que estiverem disponíveis (ou seja, o driver geralmente lidará com roteadores individuais que ficam indisponíveis devido a falhas ou manutenção). Ao especificar a lista de roteadores explicitamente, o driver não descobrirá os roteadores restantes que podem ser configurados e não tentará se conectar a eles.

O driver equilibrará automaticamente a carga de operação entre os roteadores que ele conhece.

Para se conectar a um MongoDB Atlas cluster que é implantado como um sharded cluster, conecte-se ao URI:

Mongo::Client.new("mongodb+srv://username:myRealPassword@cluster0.mongodb.net/test?w=majority")

Quando o driver se conecta a um cluster fragmentado por meio de um URI de SRV, ele pesquisa periodicamente os registros SRV do endereço especificado no URI em busca de alterações e adiciona e remove automaticamente os hosts mongos de/para sua lista de servidores, pois eles são adicionados e removidos do/para o cluster fragmentado.

Para forçar uma conexão de cluster fragmentado, utilize a opção connect: :sharded . Fazer isso geralmente é desnecessário e está obsoleto:

Mongo::Client.new([ '127.0.0.1:27017', '127.0.0.1:27018' ],
database: 'mydb', connect: :sharded)
# Or using the URI syntax:
Mongo::Client.new("mongodb://127.0.0.1:27017,127.0.0.1:27018/mydb?connect=sharded")

Revise as notas de URI SRV se estiver usando URIs SRV.

Para desabilitar a descoberta do tipo de implantação e forçar todas as operações a serem executadas em um servidor específico, especifique a opção direct_connection :

Mongo::Client.new([ '1.2.3.4:27017' ], database: 'mydb', direct_connection: true)
# Or using the URI syntax:
Mongo::Client.new("mongodb://1.2.3.4:27017/mydb?directConnection=true")

Alternativamente, a opção connect: :direct obsoleta é equivalente:

Mongo::Client.new([ '1.2.3.4:27017' ], database: 'mydb', connect: :direct)
# Or using the URI syntax:
Mongo::Client.new("mongodb://1.2.3.4:27017/mydb?connect=direct")

O modo de conexão direta é mais útil para executar operações em um nó do conjunto de réplicas específico, embora também permita que o servidor subjacente altere o tipo (por exemplo, de um nó do conjunto de réplicas para um roteador mongos ou vice-versa).

Diferentemente de outros tipos de sistema, o driver não detecta automaticamente no momento um sistema com balanceamento de carga.

Para se conectar a um balancer de carga, especifique a opção Ruby load_balanced: true ou a opção URI loadBalanced=true :

Mongo::Client.new([ '1.2.3.4:27017' ], database: 'mydb', load_balanced: true)
# Or using the URI syntax:
Mongo::Client.new("mongodb://1.2.3.4:27017/mydb?loadBalanced=true")

Ao usar essas opções, se o servidor especificado não for um balancer de carga, o cliente falhará em todas as operações (até que o servidor se torne um balancer de carga).

Para tratar o servidor como um balancer de carga mesmo que ele não se identifique como tal, use a opção Ruby connect: :load_balanced ou a opção URI connect=load_balanced :

Mongo::Client.new([ '1.2.3.4:27017' ],
database: 'mydb', load_balanced: true, connect: :load_balanced)
# Or using the URI syntax:
Mongo::Client.new("mongodb://1.2.3.4:27017/mydb?loadBalanced=true&connect=load_balanced")

Para se conectar a uma MongoDB deployment no Atlas, primeiro crie uma instância Mongo::Client usando a string de conexão do cluster e outras opções do cliente.

Você pode definir a versão stable API como uma opção do cliente para evitar alterações significativas ao atualizar para uma nova versão do servidor.

O código a seguir mostra como você pode especificar a cadeia de conexão e a opção de cliente Stable API ao se conectar a uma implementação do MongoDB e verificar se a conexão foi bem-sucedida:

require 'mongo'
# Replace the placeholders with your credentials
uri = "mongodb+srv://<username>:<password>@cluster0.sample.mongodb.net/?retryWrites=true&w=majority"
# Set the server_api field of the options object to Stable API version 1
options = { server_api: { version: "1" } }
# Create a new client and connect to the server
client = Mongo::Client.new(uri, options)
# Send a ping to confirm a successful connection
begin
admin_client = client.use('admin')
result = admin_client.database.command(ping: 1).documents.first
puts "Pinged your deployment. You successfully connected to MongoDB!"
rescue Mongo::Error::OperationFailure => ex
puts ex
ensure
client.close
end

Para saber como se conectar ao Atlas a partir do AWS Lambda, consulte a documentação Gerenciar conexões com o AWS Lambda.

Quando o driver se conecta a um URI de protocolo mongodb+srv , lembre-se do seguinte:

  1. A pesquisa de URI do SRV é realizada de forma síncrona quando o cliente é construído. Se essa pesquisa falhar por algum motivo, a construção do cliente falhará com uma exceção. Quando um cliente é construído com uma lista de hosts, o driver tentará entrar em contato e monitorar esses hosts enquanto o objeto do cliente existir. Se um desses hosts não for resolvido inicialmente, mas puder ser resolvido mais tarde, o driver poderá estabelecer uma conexão com esse host quando ele ficar disponível. A pesquisa inicial do URI do SRV deve ser bem-sucedida na primeira tentativa; pesquisas de host subsequentes serão repetidas pelo driver conforme necessário.

  2. O driver procura opções de URI nos registros TXT do DNS correspondentes aos registros SRV. Essas opções podem ser substituídas pelas opções de URI especificadas no URI e pelas opções Ruby, nessa ordem.

  3. Como as opções de URI são recuperadas em uma query de DNS separada da pesquisa de SRV, em ambientes com conectividade de rede não confiável, a query de opção de URI pode falhar quando a pesquisa de SRV for bem-sucedida. Essa falha faria com que o driver usasse a fonte de autenticação errada, levando a falhas de autenticação. Isso pode ser resolvido especificando explicitamente a fonte de autenticação:

    Mongo::Client.new("mongodb+srv://username:myRealPassword@cluster0.mongodb.net/test?w=majority&authSource=admin")
  4. Se a topologia do objeto Client construído for desconhecida ou for um cluster fragmentado, o driver começará a monitorar os registros DNS SRV especificados em busca de alterações e atualizará automaticamente a lista de servidores no cluster. As atualizações serão interrompidas se a topologia se tornar única ou um conjunto de réplicas.

Mongo::Cliento construtor do aceita uma série de opções que configuram o comportamento do driver. As opções podem ser fornecidas no hash de opções como opções Ruby, no URI como opções de URI ou ambos. Se uma opção Ruby e a opção análoga URI forem fornecidas, a opção Ruby terá precedência.

Observação

As opções passadas diretamente devem ser símbolos.

Observação

A menos que especificado de outra forma, as opções Ruby que lidam com tempos são dadas em segundos.

Opção
Descrição
Tipo
Default

:app_name

Nome do aplicativo que é impresso nos registros do mongod ao estabelecer uma conexão nas versões do servidor >= 3.4.

String

none

:auth_mech

Especifica o mecanismo de autenticação a ser usado. Pode ser um dos seguintes: :gssapi, :mongodb_cr, :mongodb_x509, :plain, :scram, :scram256. A autenticação GSSAPI (Kerberos) requer dependências adicionais.

Symbol

Se as credenciais do usuário não forem fornecidas, nil. Se forem fornecidas credenciais de usuário, o padrão dependerá da versão do servidor. MongoDB 4.0 e posterior: :scram256 se as credenciais do usuário corresponderem a um usuário que suporta autenticação SCRAM-SHA-256, caso contrário :scram. MongoDB 3.0-3.6: :scram. MongoDB 2.6: :mongodb_cr

:auth_mech_properties

Fornece propriedades adicionais do mecanismo de autenticação.

As chaves nas propriedades são interpretadas sem distinção entre maiúsculas e minúsculas. Quando o cliente é criado, as chaves são minúsculas.

Hash

Ao utilizar o mecanismo de autenticação GSSAPI, as propriedades padrão são {service_name: "mongodb"}. Caso contrário, o padrão será nulo.

:auth_source

Especifica a origem de autenticação.

String

Para MongoDB 2.6 e posterior: admin se as credenciais forem fornecidas, caso contrário, o reconhecimento de data center atual

:auto_encryption_options

Um Hash de opções para configurar a criptografia automática.

  • :key_vault_client - Um cliente conectado à instância do MongoDB armazenando as chaves de dados de criptografia (Mongo::Client, padrão para a instância do cliente de nível superior).

  • :key_vault_namespace - O namespace da collection de cofre de chaves no formato "database.collection" (String, obrigatório).

  • :kms_providers - Informações de configuração do serviço de gerenciamento de chaves. Uma ou ambas as chaves :local e :aws devem ser especificadas (Hash, obrigatório). Consulte a seção "A opção kms_providers " do tutorial Criptografia do lado do cliente para obter mais informações sobre essa opção.

  • :schema_map - O JSONSchema para uma ou mais collection especificando quais campo devem ser criptografados (Hash, opcional, o padrão é nil).

  • :bypass_auto_encryption - Se a criptografia automática deve ser ignorada ao executar operações de reconhecimento de data center (Boolean, padrão é false).

  • :extra_options - Opções relacionadas à criação de mongocryptd (Hash, opcional, o padrão é nil).

Para obter mais informações sobre como formatar essas opções, consulte a seção "Opções de criptografia automática" do tutorial Criptografia do lado do cliente.

Hash

none

:bg_error_backtrace

Experimental. Controla se e como os backtraces são registrados quando ocorrem erros em threads em background. Se true, o driver registrará backtrace completos. Se definido como um número inteiro positivo, o driver registrará até essas linhas de backtrace. Se definido como false ou nil, nenhum backtrace será registrado. Outros valores são um erro.

true, false, nil, Integer

none

:compressors

Uma lista de compressores em potencial a serem usados, em ordem de preferência. Veja abaixo detalhes sobre como o driver implementa a compactação.

Array<String>

none

:connect

Obsoleto. Desabilita a descoberta da topologia de implantação normalmente executada pelo driver e força a topologia do cluster para um tipo específico. Os valores válidos são :direct, :load_balanced, :replica_set ou :sharded. Se o :load_balanced for usado, o cliente se comportará como se estivesse conectado a um balancer de carga, independentemente de o(s) servidor(es) que ele se conecta para se anunciar como balancer de carga.

Symbol

none

:connect_timeout

O número de segundos para aguardar para estabelecer uma conexão de soquete antes de criar uma exceção. Esse tempo limite também é usado para a resolução de registros DNS SRV. nil e 0 média que não há tempo limite. A criação do cliente falhará com um erro se um valor de tempo limite inválido for passado (como um valor negativo ou um valor não numérico).

Float

10

:database

O nome do reconhecimento de data center ao qual se conectar.

String

admin

:direct_connection

Conecte-se diretamente ao host especificado, não descobre a topologia de implantação.

Boolean

false

:heartbeat_frequency

O número de segundos para que os monitores do servidor atualizem os estados do servidor de forma assíncrona.

Float

10

:id_generator

Um objeto personalizado para gerar ID para documento. Deve responder a #generate.

Object

none

:load_balanced

Se deve esperar para se conectar a um balancer de carga.

Boolean

false

:local_threshold

Especifica a latência máxima em segundos entre o servidor mais próximo e os servidores que podem estar disponíveis para seleção operar.

Float

0.015

:logger

Um registrador personalizado.

Object

Logger

:max_connecting

O número máximo de conexões que o pool de conexões tentará estabelecer em paralelo.

Integer

2

:max_idle_time

O tempo máximo, em segundos, que uma conexão pode ficar ociosa antes de ser fechada pelo pool de conexões.

Aviso: quando conectado a um balanceador de carga, o driver usa as conexões existentes para iterar cursor (o que inclui change stream) e executar transação. Definir um tempo ocioso por meio dessa opção pode fazer com que o driver feche conexões necessárias para operações subsequentes, causando falha nessas operações.

Integer

none

:max_pool_size

O tamanho máximo do pool de conexões para cada servidor. Definir essa opção como zero remove o limite de tamanho máximo do pool de conexões, permitindo que ele cresça para qualquer número de conexões.

Integer

20

:max_read_retries

O número máximo de tentativas de leitura, quando as tentativas de leitura legadas são usadas. Defina como 0 para desabilitar as novas tentativas de leitura de legado.

Integer

1

:max_write_retries

O número máximo de tentativas de gravação, quando novas tentativas de gravação legadas são usadas. Defina como 0 para desabilitar as novas tentativas de gravação legado.

Integer

1

:min_pool_size

O número mínimo de conexões no pool de conexões para cada servidor. O driver estabelecerá conexões em segundo plano até que o pool contenha esse número de conexões.

Integer

0

:monitoring

O objeto de monitoramento.

Object

none

:password

A senha do usuário com a qual autenticar.

String

none

:platform

Informações da plataforma que devem ser incluídas nos metadados impressos nos registros do mongod ao estabelecer uma conexão nas versões do servidor >= 3.4.

String

none

:read

Especifica o modo de preferência de leitura e conjunto de tags para selecionar servidor como um Hash. As chaves permitidas no hash são :mode, :tag_sets e :max_staleness.

{ read:
{ mode: :secondary,
tag_sets: [ "data_center" => "berlin" ],
max_staleness: 5,
}
}

Se conjuntos de tags forem fornecidos, eles deverão ser uma array de hashes. Um servidor satisfaz a preferência de leitura se suas tags corresponderem a qualquer hash nos conjunto de tags fornecidos.

Cada conjunto de tags deve ser um hash e será convertido internamente em uma instância BSON::Document antes de ser usado para seleção do servidor. As chaves de hash podem ser strings ou símbolos. As chaves diferenciam maiúsculas de minúsculas. Os valores de hash devem ser strings e correspondem exatamente aos valores na configuração do conjunto de réplicas.

Hash

{ :mode => :primary }

:read_concern

Especifica as opções de preocupação de leitura . A única chave válida é level, para a qual os valores válidos são :local, :available, :majority, :snapshot e :linearizable.

Hash

none

:read_retry_interval

O intervalo, em segundos, no qual as leituras em um mongos são repetidas.

Integer

5

:replica_set

Ao conectar a um conjunto de réplicas, este é o nome do conjunto para filtrar os servidores.

String

none

:retry_writes

Se uma operação de gravação de instrução única falhar devido a um erro de rede, o driver tentará automaticamente novamente uma vez quando conectado às versões 3.6+ do servidor.

Boolean

true

:sdam_proc

Como o cliente começa a monitorar a implantação em segundo plano assim que ela é construída, construir um cliente e, em seguida, assinar eventos SDAM em uma declaração separada pode fazer com que o assinante não receba alguns dos eventos SDAM. A opção :sdam_proc permite adicionar assinantes de eventos no cliente que está sendo construído antes que qualquer evento SDAM seja publicados.

Passe um Proc que será chamado com o Client como argumento após o mecanismo de assinatura de eventos do cliente ter sido inicializado, mas antes que qualquer um dos servidores seja adicionado ao cliente. Use este Proc para configurar assinantes de eventos SDAM no cliente.

Observação: o cliente não está totalmente construído quando o Proc fornecido no procedimento :sdam_proc is invoked, in particular the cluster is nil at this time. ``:sdam_proc deve se limitar a chamar os métodos Client#subscribe e Client#unsubscribe somente no cliente passado.

Proc

none

:server_api

A versão da API do servidor solicitada. Este é um hash com os seguintes itens permitidos: - :version (String) - :strict (verdadeiro ou falso) - :deprecation_errors (verdadeiro ou falso)

Observe que a versão da API do servidor só pode ser especificada como uma opção Ruby, não como uma opção URI, e não pode ser substituída para objeto de reconhecimento de data center e collection.

Se a versão da API do servidor for alterada em um cliente (por exemplo, por meio da chamada with ), todo o hash da versão da API será substituído pela nova especificação (os campos individuais antigos e os novos NÃO serão mesclados).

Hash

none

:server_selection_timeout

O número de segundos para aguardar a seleção de um servidor apropriado para que uma operação seja executada antes de criar uma exceção.

Float

30

:socket_timeout

O número de segundos para aguardar a execução de uma operação em um soquete antes de gerar uma exceção. nil e 0 média que não há tempo limite. A criação do cliente falhará com um erro se um valor de tempo limite inválido for passado (como um valor negativo ou um valor não numérico).

Float

none

:srv_max_hosts

O número máximo de mongos com o qual o driver se comunicará para topologias fragmentadas. Se esta opção estiver definida para 0, não haverá nenhum número máximo de mongos. Se o URI fornecido for resolvido para mais hosts do que :srv_max_hosts, o cliente escolherá aleatoriamente um subconjunto de hosts do tamanho de :srv_max_hosts . Observe que os hosts que o driver ignora durante a construção do cliente nunca serão usados. Se os hosts escolhidos pelo driver ficarem indisponíveis, o cliente deixará de funcionar completamente, mesmo que o sistema tenha outros mongos funcionais.

Integer

0

:srv_service_name

O nome do serviço a ser usado na query DNS do SRV.

String

mongodb

:ssl

Diga ao cliente para se conectar aos servidores via TLS.

Boolean

false

:ssl_ca_cert

O caminho do arquivo contendo certificados de autoridade de certificação concatenados usados para validar certificados passados da outra extremidade da conexão. Um de :ssl_ca_cert, :ssl_ca_cert_string ou :ssl_ca_cert_object (em ordem de prioridade) é exigido para :ssl_verify.

String

none

:ssl_ca_cert_object

Uma array de OpenSSL::X509::Certificate representando os certificados de autoridade de certificação usados para validar os certificados passados da outra extremidade da conexão. Um de :ssl_ca_cert, :ssl_ca_cert_string ou :ssl_ca_cert_object (em ordem de prioridade) é exigido para :ssl_verify.

Array< OpenSSL::X509::Certificate >

none

:ssl_ca_cert_string

Uma string contendo certificados de autoridade de certificação concatenados usados para validar certificados passados da outra extremidade da conexão. Um de :ssl_ca_cert, :ssl_ca_cert_string ou :ssl_ca_cert_object (em ordem de prioridade) é exigido para :ssl_verify.

String

none

:ssl_cert

Caminho para o arquivo de certificado do cliente usado para identificar a aplicação para o MongoDB Server. O arquivo também pode conter a chave privada do certificado; em caso afirmativo, a chave privada é ignorada por esta opção. O arquivo também pode conter certificados intermediários que formam a cadeia de certificados do certificado do cliente para o certificado da CA; quaisquer certificados intermediários serão analisados pelo driver e fornecidos ao contexto OpenSSL no atributo extra_chain_cert . Se certificados intermediários forem fornecidos, eles deverão seguir o certificado do cliente, que deve ser o primeiro certificado no arquivo.

Esta opção, se presente, tem precedência sobre as opções :ssl_cert_string e :ssl_cert_object .

String

none

:ssl_cert_object

The OpenSSL::X509::Certificate used to identify the application to the MongoDB servers. Somente um certificado pode ser passado por esta opção.

OpenSSL::X509::Certificate

none

:ssl_cert_string

Uma string contendo o certificado codificado PEM usado para identificar a aplicação para o MongoDB Server. A string também pode conter a chave privada do certificado; em caso afirmativo, a chave privada é ignorada por esta opção. A string também pode conter certificados intermediários que formam a cadeia de certificados do certificado do cliente para o certificado da CA; quaisquer certificados intermediários serão analisados pelo driver e fornecidos ao contexto OpenSSL no atributo extra_chain_cert . Se certificados intermediários forem fornecidos, eles deverão seguir o certificado do cliente, que deve ser o primeiro certificado na string.

Esta opção, se presente, tem precedência sobre a opção :ssl_cert_object .

String

none

:ssl_key

O arquivo de chave privada usado para identificar a conexão com o MongoDB. Observe que, mesmo que a chave seja armazenada no mesmo arquivo que o certificado, ambos precisam ser explicitamente especificados. Esta opção, se presente, tem precedência sobre os valores de :ssl_key_string e :ssl_key_object.

String

none

:ssl_key_object

A chave privada usada para identificar a conexão com o MongoDB.

OpenSSL::PKey

none

:ssl_key_pass_phrase

Uma senha para a chave privada.

String

none

:ssl_key_string

Uma string contendo a chave privada codificada PEM usada para identificar a conexão com o MongoDB. Este parâmetro, se presente, tem precedência sobre o valor da opção :ssl_key_object.

String

none

:ssl_verify

Se deve ser executada a validação do certificado de Peering, nome do host e endpoint OCSP. Observe que a decisão de validar certificados será substituída se :ssl_verify_certificate estiver definido, a decisão de validar nomes de host será substituída se :ssl_verify_hostname estiver definido e a decisão de validar endpoint OCSP será substituída se :ssl_verify_ocsp_endpoint está definido.

Boolean

true

:ssl_verify_certificate

Se a validação do certificado de Peering deve ser executada. Essa configuração substitui a configuração :ssl_verify no que se refere a se a validação do certificado é executada.

Boolean

true

:ssl_verify_hostname

Se a validação do nome do host de Peering deve ser executada. Essa configuração substitui a configuração :ssl_verify em relação à validação do nome do host.

Boolean

true

:ssl_verify_ocsp_endpoint

Se o certificado fornecido pelo servidor deve ser validado em relação ao endpoint OCSP especificado no certificado, se o endpoint OCSP for especificado no certificado. Essa configuração substitui :ssl_verify em relação ao fato de a validação do endpoint OCSP ser executada.

Boolean

true

:truncate_logs

Se os registros devem ser truncados nos 250 caracteres padrão.

Boolean

true

:user

O nome do usuário com o qual autenticar.

String

none

:wait_queue_timeout

O número de segundos para aguardar uma conexão no pool de conexões ficar disponível.

Float

10

:wrapping_libraries

Informações sobre bibliotecas, como ODMs, que estão envolvendo o driver. Especifique primeiro as bibliotecas de nível inferior. Chaves de hash permitidas: :name, :version, :platform. Exemplo: [name: 'Mongoid', version: '7.1.2']

Array<Hash>

none

:write

Obsoleto. Equivalente à opção :write_concern . Se :write e :write_concern forem especificados, seus valores deverão ser idênticos.

Hash

{ w: 1 }

:write_concern

Especifica as opções de referência de escrita como Hash. As chaves no hash podem ser :w, :wtimeout, :j, :fsync. Observe que :wtimeout é especificado em milissegundos, não segundos.

{ write_concern: { w: 2 } }

Hash

{ w: 1 }

:zlib_compression_level

O nível de compressão zlib a ser usado, se estiver usando compressão. Consulte o módulo zlib do Ruby para obter níveis válidos.

Integer

none

Observação

O driver Ruby não implementa a verificação da lista de revogação de certificados (CRL).

Como as opções de URI devem estar em camel case, que não é o padrão Ruby, a tabela a seguir mostra as opções de URI e suas opções Ruby correspondentes.

As opções de URI são explicadas em detalhes na referência de URI de conexão.

Observação

As opções definidas em milissegundos no URI são representadas como float em Ruby e as unidades são segundos.

Opção de URI
Opção Ruby

appName=String

:app_name => String

authMechanism=String

:auth_mech => Symbol

Os valores do mecanismo de autenticação são convertidos da seguinte maneira de opções de URI para opções Ruby:

  • GSSAPI => :gssapi

  • MONGODB-CR => :mongodb_cr

  • MONGODB-X509 => :mongodb_x509

  • PLAIN => :plain

  • SCRAM-SHA-1 => :scram

  • SCRAM-SHA-256 => :scram256

Se um valor diferente for fornecido para o mecanismo de autenticação, ele será convertido para a opção Ruby não modificada e manterá seu tipo String . Observe que, embora atualmente o driver permita que uma Client instância seja construída com um mecanismo de autenticação não reconhecido, esse comportamento pode mudar em uma versão futura do driver.

authMechanismProperties=Strings

{ :auth_mech_properties => { :service_realm => String, :canonicalize_host_name => true|false, :service_name => String } }

Especificado como chave separada por vírgula:pares de valores, por exemplo "SERVICE_REALM:foo,CANONICALIZE_HOST_NAME:TRUE".

authSource=String

:auth_source => String

compressors=Strings

:compressors => Array<String>

Uma lista separada por vírgulas de possíveis compressores a serem usados, em ordem de preferência. Veja abaixo detalhes sobre como o driver implementa a compactação.

connect=String

:connect => Symbol

Os mesmos valores que a opção Ruby :connect aceita são aceitos aqui. Para valores de várias palavras, os valores devem ser fornecidos usando sublinhados para separar as palavras, ou seja, connect=replica_set e connect=load_balanced.

connectTimeoutMS=Integer

:connect_timeout => Float

Ao contrário da opção Ruby correspondente, que falha na criação do cliente em valores inválidos (por exemplo, valores negativos e não numéricos), os valores inválidos fornecidos por meio dessa opção de URI são ignorados com um aviso.

diretaConnection=Boolean

:direct_connection => Boolean

fsync=Boolean

{ :write_concern => { :fsync => true|false }}

heartbeatFrequencyMS=Integer

:heartbeat_frequency => Float

journal=Boolean

{ :write_concern => { :j => true|false }}

loadBalanced=Boolean

:load_balanced => Boolean

LocalThresholdMS=Integer

:local_threshold => Float

maxConnecting=Integer

:max_connecting => Integer

maxIdleTimeMS=Integer

:max_idle_time => Float

maxStalenessSeconds=Inteiro

{ :read => { :max_staleness => Integer }}

Se o valor da opção maxStalenessSeconds URI for -1, o driver trata isso como se a opção não tenha sido fornecida. Caso contrário, se o valor da opção for numérico, a opção Ruby será definida para o valor especificado convertido em Integer. Observe que os valores numéricos maiores que 0 mas menores que 90, ou menores que -1, são aceitos pelo construtor Client , mas farão com que a seleção do servidor falhe (a menos que a opção seja alterada, por exemplo, pelo método with anterior a quaisquer operações realizadas no condutor). Se o valor da opção não for numérico, ele será ignorado e o driver tratará esse caso como se a opção não tivesse sido fornecida.

maxPoolSize=Inteiro

:max_pool_size => Integer

minPoolSize=Integer

:min_pool_size => Integer

readConcernLevel=String

:read_concern => Hash

readPreference=String

{ :read => { :mode => Symbol }}

readPreferenceTags=Strings

{ :read => { :tag_sets => Array<Hash> }}

Cada instância do campo readPreferenceTags é uma chave separada por vírgula:par de valores que aparecerá na array :tag_sets na ordem em que são especificados. Por exemplo, "readPreferenceTags=dc:ny,rack:1&readPreferenceTags=dc:ny" será convertido para [ { 'dc' => 'ny', 'rack' => '1' }, { 'dc' => 'ny' }].

replicaSet=String

:replica_set => String

retryWrites=Boolean

:retry_writes => boolean

serverSelectionTimeoutMS=Integer

:server_selection_timeout => Float

socketTimeoutMS=Integer

:socket_timeout => Float

Ao contrário da opção Ruby correspondente, que falha na criação do cliente em valores inválidos (por exemplo, valores negativos e não numéricos), os valores inválidos fornecidos por meio dessa opção de URI são ignorados com um aviso.

srvMaxHosts=Integer

:srv_max_hosts => Integer

srvServiceName=String

:srv_service_name => String

ssl=Boolean

:ssl => true|false

tls=Boolean

:ssl => boolean

tlsAllowInvalidCertificates=Booleano

:ssl_verify_certificate => boolean

Como tlsAllowInvalidCertificates usa true para indicar que a verificação deve ser desabilitada e ssl_verify_certificate usa false para indicar que a verificação deve ser desabilitada, o booleano é invertido antes de ser usado para definir ssl_verify_certificate.

tlsAllowInvalidHostnames=Boolean

:ssl_verify_hostname => boolean

Como tlsAllowInvalidHostnames usa true para indicar que a verificação deve ser desabilitada e ssl_verify_hostname usa false para indicar que a verificação deve ser desabilitada, o booleano é invertido antes de ser usado para definir ssl_verify_hostname.

tlsCAFile=String

:ssl_ca_cert => String

tlsCertificateKeyFile=String

:ssl_cert => String

tlsCertificateKeyFile=String

:ssl_key => String

tlsCertificateKeyFilePassword=String

:ssl_key_pass_phrase => String

tlsDisableOCSPEndpointCheck=Boolean

:ssl_verify_ocsp_endpoint => boolean

Como tlsDisableOCSPEndpointCheck usa true para indicar que a verificação deve ser desabilitada e ssl_verify_ocsp_endpoint usa false para indicar que a verificação deve ser desabilitada, o booleano é invertido antes de ser usado para definir ssl_verify_ocsp_endpoint.

tlsInsecure=Boolean

:ssl_verify => boolean

Como o tlsInsecure usa true para indicar que a verificação deve ser desabilitada e ssl_verify usa false para indicar que a verificação deve ser desabilitada, o booleano é invertido antes de ser usado para definir ssl_verify.

w=Integer|String

{ :write_concern => { :w => Integer|String }}

waitQueueTimeoutMS=Integer

:wait_queue_timeout => Float

wtimeoutMS=Integer

{ :write_concern => { :wtimeout => Integer }}

zlibCompressionLevel=Integer

:zlib_compression_level => Integer

Observação

O driver Ruby só falha nas conexões quando recebe uma resposta assinada definitiva indicando que o certificado do servidor foi revogado. Devido a isso, o driver não reconhece a opção tlsDisableCertificateRevocationCheck URI. Se esta opção for fornecida em um URI, ela será ignorada.

Ao executar uma operação, o número de segundos para aguardar o driver encontrar um servidor apropriado para enviar uma operação. O padrão é 30.

Um valor de 0 significa que não há tempo limite.

Quando um valor inválido (por exemplo, um valor negativo ou um valor não numérico) é passado por meio da opção URI, a entrada inválida é ignorada com um aviso. Quando um valor inválido é passado diretamente para o Cliente por meio de uma opção Ruby, a construção do Cliente falha com um erro.

Em implantações de conjuntos de réplicas, esse tempo limite deve ser definido para exceder os tempos típicos de eleição de conjuntos de réplicas para que o driver lide com as alterações primárias de forma transparente. Esse tempo limite também permite que o aplicativo e o banco de dados sejam iniciados simultaneamente; o aplicativo aguardará até esse momento para que o banco de dados fique disponível.

Se o servidor de aplicativos estiver atrás de um proxy reverso, o tempo limite de seleção do servidor deverá ser menor do que o tempo limite da solicitação configurado no proxy reverso (por exemplo, isso se aplica a implementações no Herku, que tem um tempo limite fixo de 30 segundos na camada de roteamento). Em desenvolvimento, esse valor pode ser reduzido para fornecer falhas mais rápidas quando o servidor não estiver em execução.

O número de segundos para aguardar a conclusão de uma leitura ou gravação de soquete em conexões regulares (não de monitoramento). O padrão não é um tempo limite.

Um valor de 0 significa que não há tempo limite.

Quando um valor inválido (por exemplo, um valor negativo ou um valor não numérico) é passado por meio da opção URI, a entrada inválida é ignorada com um aviso. Quando um valor inválido é passado diretamente para o Cliente por meio de uma opção Ruby, a construção do Cliente falha com um erro.

Esse tempo limite deve levar em conta a latência da rede e a duração da operação. Por exemplo, definir esse tempo limite para 5 segundos cancelará as query que levam mais de 5 segundos para serem executadas no servidor com Mongo::Error::SocketTimeoutError.

Observe que, embora por padrão não haja um tempo limite de soquete definido, o sistema operacional ainda pode atingir o tempo limite das operações de leitura, dependendo de sua configuração. As configurações de keepalive destinam-se a detectar conexões de rede interrompidas (em vez de abortar as operações simplesmente porque elas levam muito tempo para serem executadas).

Observe que, se uma operação atingir o tempo limite pelo driver devido a exceder o valor socket_timeout , ela não será cancelada no servidor. Por esse motivo, é recomendável usar a opção max_time_ms para operações de execução potencialmente longa, pois isso interromperá sua execução no servidor.

Essa opção não se aplica ao monitoramento de conexões.

O número de segundos para aguardar o estabelecimento de uma conexão de soquete com um servidor. O padrão é 10.

Esse tempo limite também é usado como tempo limite de conexão e tempo limite de soquete para monitorar conexões.

Ao usar um URI mongodb+srv:// , esse tempo limite também é usado para pesquisas de DNS SRV e TXT. Observe que o tempo limite se aplica por pesquisa; devido às listas de pesquisa de sufixos DNS, várias pesquisas podem ser realizadas como parte de uma única resolução de nome.

O número de segundos para aguardar uma conexão no pool de conexões ficar disponível. O padrão é 10.

A partir da versão 2.11 do driver, esse tempo limite deve ser definido para um valor pelo menos tão grande quanto connect_timeout , pois o pool de conexões agora estabelece totalmente as conexões antes de devolvê-las, o que pode exigir várias viagens de ida e volta da rede.

Especificado como uma opção em uma operação específica, o número de milissegundos para permitir a execução da operação no servidor. Não definido por padrão.

Considere usar esta opção em vez de um socket_timeout para que operações de execução potencialmente longas sejam interrompidas no servidor quando demorarem muito.

O número de milissegundos para aguardar o reconhecimento de uma gravação pelo número de servidor especificados na referência de escrita. Não definido por padrão, o que instrui o servidor a aplicar seu padrão. Esta opção pode ser definida globalmente no cliente ou passada para operações individuais em :write_concern.

Para se conectar ao MongoDB deployment usando TLS:

  • Ative conexões TLS em Mongo::Client.

  • Especifique o certificado TLS do cliente.

  • Especifique o certificado CA para verificar o certificado TLS do servidor.

Observação

Ao usar JRuby, os certificados ECDSA não são atualmente suportados.

Todas as versões do MongoDB Server suportadas pelo Ruby (2.6 e superior) implementam apenas TLS. 2.6 e servidores superiores não usam SSL.

Por motivos históricos, os nomes das opções Ruby referentes à configuração TLS usam o prefixo ssl em vez do prefixo tls . The next major version of the Ruby driver (3.0) will use the tls prefix for Ruby option names.

Os nomes das opções de URI usam o prefixo tls , com uma exceção: há uma opção de URI ssl que é preterida e equivalente à opção de URI tls .

O TLS deve ser solicitado explicitamente no lado do cliente quando a implantação exige conexões TLS — atualmente não há detecção automática se a implantação exige TLS.

Para solicitar conexões TLS, especifique as seguintes opções do cliente ao construir um Mongo::Client:

  • A opção :ssl Ruby.

  • A opção tls URI .

  • A opção ssl URI (obsoleto).

Por padrão, o MongoDB Server tentará verificar os certificados TLS dos clientes em conexão, o que exige que os clientes especifiquem seus certificados TLS ao se conectar. Isso pode ser feito via:

  • As opções Ruby :ssl_cert/:ssl_cert_object/:ssl_cert_string e :ssl_key/:ssl_key_object/:ssl_key_string/:ssl_key_pass_phrase .

  • A opção tlsCertificateKeyFile URI .

Ao usar as opções Ruby, o certificado TLS do cliente e a chave privada correspondente podem ser fornecidos separadamente. Por exemplo, se o certificado for armazenado em client.crt e a chave privada for armazenada em client.key, um Mongo::Client poderá ser construído da seguinte forma:

client = Mongo::Client.new(["localhost:27017"],
ssl: true,
ssl_cert: 'path/to/client.crt',
ssl_key: 'path/to/client.key',
ssl_ca_cert: 'path/to/ca.crt',
)

ssl_cert, ssl_cert_string, ssl_key e ssl_key_string As opções Ruby também permitem que o certificado e a chave sejam fornecidos no mesmo arquivo ou string, respectivamente. Os arquivos que contêm certificado e chave privada frequentemente têm a extensão .pem . Quando o certificado e a chave privada são fornecidos no mesmo arquivo ou string, as opções de certificado e chave devem ser utilizadas, da seguinte forma:

client = Mongo::Client.new(["localhost:27017"],
ssl: true,
ssl_cert: 'path/to/client.pem',
ssl_key: 'path/to/client.pem',
ssl_ca_cert: 'path/to/ca.crt',
)

Ao usar a opção URI, o certificado e a chave devem ser armazenados em um arquivo e ambos devem ser armazenados no mesmo arquivo. Exemplo de uso:

client = Mongo::Client.new(
"mongodb://localhost:27017/?tls=true&tlsCertificateKeyFile=path%2fto%2fclient.pem&tlsCertificateKeyFile=path%2fto%2fca.crt")

Observação

Os valores das opções de URI devem ser escapados corretamente de URI. Isso se aplica, por exemplo, a barras nos caminhos.

Pode ser desejável configurar ainda mais as opções de TLS no driver, por exemplo, ativando ou desativando determinadas cifras. Atualmente, o driver Ruby não fornece uma maneira de fazer isso ao inicializar um Mongo::Client.

No entanto, o driver Ruby fornece uma maneira de definir "ganchos de contexto TLS" globais - esses são objetos Proc``s that will be invoked before any TLS socket connection and can be used to modify the underlying ``OpenSSL::SSL::SSLContext fornecidos pelo usuário usados pelo soquete.

Para definir os ganchos de contexto TLS, adicione a array Proc``s to the ``Mongo.tls_context_hooks . Isso deve ser feito antes de criar qualquer instância do Mongo::Client. Por exemplo, em um aplicativo Rails, esse código pode ser colocado em um inicializador.

Mongo.tls_context_hooks.push(
Proc.new { |context|
context.ciphers = ["AES256-SHA"]
}
)
# Only the AES256-SHA cipher will be enabled from this point forward

Cada Proc em Mongo.tls_context_hooks passará um objeto OpenSSL::SSL::SSLContext como seu único argumento. Esses objetos Proc``s will be executed sequentially during the creation of every ``Mongo::Socket::SSL .

É possível atribuir toda a array de hooks chamando Mongo.tls_context_hooks= , mas isso removerá todos os hooks atribuídos anteriormente. É recomendável usar os métodos Array#push ou Array#unshift para adicionar novos hooks.

Também é possível remover os hooks do Mongo.tls_context_hooks armazenando uma referência aos Procs em outro lugar do aplicativo e, em seguida, usando o Array#delete_if para remover os hooks desejados.

Aviso

Os hooks de contexto TLS são globais e afetarão todas as instâncias de Mongo::Client. Qualquer biblioteca que permita que aplicativos habilitem esses hooks deve expor métodos para modificar os hooks (que podem ser chamados pelo aplicativo) em vez de habilitar automaticamente os hooks quando a biblioteca é carregada.

Mais informações sobre como configurar o servidor MongoDB para TLS estão disponíveis no manual do MongoDB .

É possível usar cadeias de certificados para os certificados do cliente e do servidor. Ao usar cadeias, o parâmetro da autoridade de certificação deve ser configurado para conter somente os certificados raiz confiáveis; os certificados intermediários, se houver, devem ser fornecidos nos certificados do servidor ou do cliente, concatenando-os após os certificados do servidor da folha e do cliente, respectivamente.

:ssl_cert e as opções :ssl_cert_string Ruby, bem como a opção tlsCertificateKeyFile URI, suportam cadeias de certificados. A opção Ruby :ssl_cert_object , que usa uma instância de OpenSSL::X509::Certificate, não oferece suporte a cadeias de certificados.

O driver Ruby executa a verificação rigorosa do certificado X.509, o que exige que ambos os campos a seguir sejam definidos no(s) certificado(s) intermediário(s):

  • Restrições básicas do X509v3: CA: true -- Pode assinar certificados

  • Uso da chave X509v3: Key Cert Sign -- Pode assinar certificados

Mais informações sobre esses sinalizadores podem ser encontradas nesta pergunta do Stack Overflow.

É uma armadilha comum concatenar certificados intermediários para os certificados CA raiz passados nas opções tlsCAFile / ssl_ca_cert . Ao fazer isso, os certificados intermediários são elevados ao status confiável e não são verificados em relação à raiz real da CA. Mais informações sobre este problema estão disponíveis nesta publicação da lista de e-mails.

O driver tentará verificar o certificado TLS do servidor por padrão e cancelará a conexão se essa verificação falhar. Por padrão, o driver usará o armazenamento de certificados raiz do sistema padrão como âncora de confiança. Para especificar o certificado CA com o qual o certificado do servidor é assinado, use:

  • As opções :ssl_ca_cert/:ssl_ca_cert_string/:ssl_ca_cert_object Ruby

  • A opção tlsCAFile URI .

Se alguma dessas opções for fornecida, o certificado do servidor será verificado somente em relação ao certificado CA especificado e o armazenamento de certificados raiz do sistema padrão não será usado.

Para não executar a verificação do certificado TLS do servidor, o que não é recomendado, especifique a opção ssl_verify: false Ruby ou a opção tlsInsecure=true URI.

A opção :ssl_ca_cert Ruby e a opção tlsCAFile URI podem ser usadas com um arquivo contendo vários certificados. Todos os certificados assim referenciados se tornarão âncoras de confiança.

A opção :ssl_ca_cert_object recebe uma array de certificados e, portanto, também pode ser usada para adicionar vários certificados como autoridades de certificação.

A opção :ssl_ca_cert_string suporta a especificação de somente um certificado CA.

Aviso

Os certificados intermediários não devem ser fornecidos em arquivos especificados pelas opções de certificado CA. Isso elevaria os certificados intermediários ao status de certificados raiz, em vez de verificar os certificados intermediários em relação aos certificados raiz.

Se for necessário usar certificados intermediários, especifique-os como parte dos arquivos de certificado TLS do cliente ou servidor.

Se o certificado fornecido pelo servidor contiver um URI de endpoint OCSP, o driver emitirá uma solicitação OCSP para o endpoint especificado para verificar a validade do certificado.

A verificação de ponto de conexão do OCSP pode ser desabilitada configurando a opção Ruby :ssl_verify_ocsp_endpoint para false ou configurando a opção tlsDisableOCSPEndpointCheck URI para true ao criar um cliente.

Observação

A verificação de endpoints OCSP não é realizada atualmente ao ser executado no JRuby, pois o JRuby não expõe corretamente o URI do endpoint OCSP.

Quando um cliente é construído com localhost como o nome do host, ele tentará uma conexão IPv4 somente (ou seja, se localhost resolver para 127.0.0.1 e ::1, o driver tentará se conectar apenas a 127.0.0.1).

Quando um cliente é construído com nomes de host diferentes de localhost, ele tentará as conexões IPv4 e IPv6, dependendo dos endereços para os quais os nomes de host são resolvidos. O driver respeita a ordem em que getaddrinfo retorna os endereços e tentará se conectar a eles sequencialmente. A primeira conexão bem-sucedida será usada.

Atualmente, o driver não implementa o algoritmoHappyEeballs.

Quando permitido pela configuração do sistema e pelo tempo de execução da linguagem Ruby, o driver habilita a manutenção de atividade TCP e, para cada um dos parâmetros de manutenção listados abaixo, define o valor do respectivo parâmetro para o valor especificado se o valor do sistema puder ser determinado e for maior que o valor do driver listado:

  • tcp_keepalive_time: 120 segundos

  • tcp_keepalive_intvl: 10 segundos

  • tcp_keepalive_cnt: 9 sondas

Observação

A partir do JRuby 9.2.14.0, O JRuby não implementa a API necessária para definir os parâmetros de keepalive. Ao usar o JRuby, o driver não poderá definir os parâmetros de manutenção e a configuração do sistema estará em vigor.

Para usar valores mais baixos ou alterar os parâmetros em ambientes como o JRuby que não expõem as APIs necessárias, ajuste os parâmetros no nível do sistema, conforme descrito na seção de manutenção de atividade das Perguntas frequentes do MongoDB Diagnostics.

Mongo::Client instâncias têm um pool de conexões por servidor ao qual o cliente está conectado. O pool cria conexões sob demanda para dar suporte às operações simultâneas do MongoDB emitidas pelo aplicativo. Não há afinidade de thread para conexões.

A instância do cliente abre uma conexão adicional por servidor conhecido para monitorar o estado do servidor.

O tamanho de cada pool de conexões é limitado a max_pool_size, que o padrão é 5. Quando um thread no aplicativo inicia uma operação no MongoDB, ele tenta recuperar uma conexão do pool para enviar essa operação. Se houver algumas conexões disponíveis no pool, ele verificará uma conexão do pool e a usará para a operação. Se não houver conexões disponíveis e o tamanho do pool for menor que max_pool_size, uma nova conexão será criada. Se todas as conexões estiverem em uso e o pool tiver atingido seu tamanho máximo, o thread aguardará que uma conexão seja retornada ao pool por outro thread. Se max_pool_size estiver definido como zero, não haverá limite para o número máximo de conexões no pool.

Cada pool tem um limite de número de conexões que podem se conectar simultaneamente a um servidor. Esse limite é chamado de max_connecting e o padrão é 2. Se o número de conexões que estão se conectando a um servidor atingir esse limite, o pool aguardará que uma tentativa de conexão seja bem-sucedida ou falhe antes de tentar criar uma nova conexão. Se o seu aplicativo tiver um grande número de threads, talvez você queira aumentar max_connecting para evitar que os threads aguardem o estabelecimento de uma conexão.

O número de segundos que a thread aguardará até que uma conexão fique disponível é configurável. Esta configuração, chamada wait_queue_timeout, é definida em segundos. Se esse tempo limite for atingido, um Timeout::Error será gerado. O padrão é 1 segundo.

A partir da versão 2.11 do driver, o driver cria conexões até a configuração min_pool_size . Antes da versão 2.11 do driver, o driver sempre criava conexões sob demanda. Em todas as versões do driver, depois que uma conexão for estabelecida, ela será mantida no pool pelo driver, desde que o tamanho do pool não exceda min_pool_size.

Observe que, se min_pool_size estiver definido para um valor maior que zero, o driver estabelecerá esse número de conexões com secundários em sistemas de conjuntos de réplicas, mesmo que o aplicativo não execute leituras secundárias. O objetivo dessas conexões é fornecer failover mais rápido quando o primário muda.

Veja um exemplo de estimativa do número de conexões que um aplicativo multithread abrirá: Um cliente conectado a um conjunto de réplicas de 3 nós abre 3 soquetes de monitoramento. Ele também abre quantos soquetes forem necessários para oferecer suporte às operações simultâneas de um aplicativo multithread em cada servidor, até max_pool_size . Se o aplicativo usar apenas o primário (o padrão), somente o pool de conexões primárias crescerá e o total de conexões será de no máximo 8 (5 conexões para o pool primário + 3 conexões de monitoramento). Se o aplicativo usar uma read preference para consultar os secundários, seus pools também crescerão e o total de conexões poderá chegar a 18 (5 + 5 + 5 + 3).

A configuração padrão de um Mongo::Client funciona para a maioria dos aplicativos:

client = Mongo::Client.new(["localhost:27017"])

Crie este cliente uma vez para cada processo e reutilize-o para todas as operações. É um erro comum criar um novo cliente para cada solicitação, o que é muito ineficiente e não é para isso que o cliente foi projetado.

Para suportar um número extremamente alto de operações simultâneas do MongoDB em um processo, aumente max_pool_size:

client = Mongo::Client.new(["localhost:27017"], max_pool_size: 200)

Para oferecer suporte a um número extremamente alto de threads que compartilham o mesmo cliente em um processo, aumente max_connecting:

client = Mongo::Client.new(["localhost:27017"], max_pool_size: 200, max_connecting: 10)

Qualquer número de threads pode aguardar a disponibilidade das conexões e pode aguardar a configuração padrão (1 segundo) ou wait_queue_timeout :

client = Mongo::Client.new(["localhost:27017"], wait_queue_timeout: 0.5)

Quando #close é chamado em um cliente por qualquer thread, todas as conexões são fechadas:

client.close

Observe que, ao criar um cliente usando a sintaxe de bloco descrita acima, o cliente é automaticamente fechado após o término da execução do bloco.

Observação

Os aplicativos que usam o Mongoid devem seguir a documentação "Uso com servidores forking" do Mongoid. A orientação abaixo é fornecida para aplicativos que usam diretamente o driver Ruby.

Ao usar o mongo Ruby driver em um aplicativo Web com um servidor Web de bifurcação, como o Puma, ou quando o aplicativo de outra forma bifurca, cada processo (pai e filho) deve ter suas próprias conexões de cliente. Isso ocorre porque:

  1. Os threads Ruby em segundo plano, como aqueles usados pelo driver Ruby MongoDB para monitorar o estado da conexão, não são transferidos para o processo filho.

  2. Descritores de arquivo, como soquetes de rede, são compartilhados entre processos pai e filho, o que pode causar conflitos de E/S.

Em relação (1), se você não reiniciar os threads de monitoramento do driver no processo filho após a bifurcação, embora seu filho possa inicialmente parecer funcionar corretamente, você eventualmente verá Mongo::Error::NoServerAvailable exceções se/quando o estado do cluster MongoDB mudar, por exemplo , devido a erros de rede ou um evento de manutenção.

Em relação ao 2, se um processo filho reutilizar os descritores de arquivo dos pais, você verá Mongo::Error::SocketError erros com mensagens como Errno::EPIPE: Broken pipe e EOFError: end of file reached.

Quando o driver Ruby for usado em um aplicação da web, se possível, recomendamos não criar nenhuma instância Mongo::Client no processo pai (antes da bifurcação dos funcionários) e, em vez disso, criar apenas instâncias de cliente nos funcionários.

Alguns casos de uso avançados, como a opção fork_worker do Puma, exigem que Mongo::Client as instâncias estejam abertas nos processos pai e filho. Nesse caso, você deve lidar com a reconexão do cliente manualmente.

Para fazer isso, imediatamente antes da bifurcação, feche todas as conexões de cliente existentes em seu processo principal. Isso evitará que o processo principal sofra erros de rede e monitoramento devido à reutilização dos descritores de arquivos dos pais pelo filho.

# Immediately before fork
client.close

Observação

A chamada de Client#close não interrompe as operações do banco de dados atualmente a bordo. Os clientes se reconectarão automaticamente quando você realizar novas operações.

Em seguida, imediatamente após a bifurcação, reconecte seus clientes no processo filho recém-bifurcado, que reabilitará os threads de monitoramento do driver.

# Immediately after fork
client.reconnect

A maioria dos servidores web fornece hooks que podem ser usados por aplicativos para executar ações quando os processos de trabalho são bifurcados. Os hooks recomendados são:

  • Para Puma, use before_fork e on_refork para fechar clientes no processo pai e on_worker_boot para se reconectar nos processos filho.

  • Para unicórnio, before_fork para fechar clientes no processo pai e after_fork para reconectar clientes nos processos filho.

  • Para Passageiro, starting_worker_process para reconectar clientes nos processos filho (o Passageiro parece não ter um hook pré-fork).

Consulte a documentação "Uso com servidores forking" do Mongoid para obter mais exemplos.

O método summary do cliente retorna o estado atual do cliente, incluindo servidores que o cliente está monitorando e seu estado. Se algum dos servidores não estiver sendo monitorado, isso será indicado pelo sinalizador NO-MONITORING .

Um cliente operando normalmente produzirá um resumo semelhante ao seguinte:

client.summary
=> "#<Client cluster=#<Cluster
topology=ReplicaSetWithPrimary[localhost:14420,localhost:14421,localhost:14422,localhost:14423,name=ruby-driver-rs,v=1,e=7fffffff000000000000001f]
servers=[#<Server address=localhost:14420 PRIMARY replica_set=ruby-driver-rs pool=#<ConnectionPool size=0 (0-5) used=0 avail=0 pending=0>>,
#<Server address=localhost:14421 SECONDARY replica_set=ruby-driver-rs pool=#<ConnectionPool size=0 (0-5) used=0 avail=0 pending=0>>,
#<Server address=localhost:14422 SECONDARY replica_set=ruby-driver-rs pool=#<ConnectionPool size=0 (0-5) used=0 avail=0 pending=0>>,
#<Server address=localhost:14423 ARBITER replica_set=ruby-driver-rs>]>>"

Um cliente sem threads em segundo plano produzirá um resumo semelhante ao seguinte:

client.summary
=> "#<Client cluster=#<Cluster
topology=ReplicaSetWithPrimary[localhost:14420,localhost:14421,localhost:14422,localhost:14423,name=ruby-driver-rs,v=1,e=7fffffff000000000000001f]
servers=[#<Server address=localhost:14420 PRIMARY replica_set=ruby-driver-rs NO-MONITORING pool=#<ConnectionPool size=0 (0-5) used=0 avail=0 pending=0>>,
#<Server address=localhost:14421 SECONDARY replica_set=ruby-driver-rs NO-MONITORING pool=#<ConnectionPool size=0 (0-5) used=0 avail=0 pending=0>>,
#<Server address=localhost:14422 SECONDARY replica_set=ruby-driver-rs NO-MONITORING pool=#<ConnectionPool size=0 (0-5) used=0 avail=0 pending=0>>,
#<Server address=localhost:14423 ARBITER replica_set=ruby-driver-rs>]>>"

O driver implementa dois mecanismos para tentar ler novamente: moderno e legado. A partir da versão 2.9.0 do driver, o mecanismo moderno é usado por padrão e o mecanismo legado é preterido.

Quando o mecanismo moderno é usado, as operações de leitura são tentadas novamente uma vez no evento de um erro de rede, um erro "não mestre" ou um erro "o nó está se recuperando". As seguintes operações são cobertas:

Quando uma operação retorna um cursor, somente o comando de leitura inicial pode ser repetido. As operações getMore nos cursores não são repetidas pela versão 2.9.0 ou mais recente do driver. Além disso, quando uma operação de leitura é tentada novamente, um novo servidor para a operação é selecionado; isso pode fazer com que a nova tentativa seja enviada para um servidor diferente daquele que recebeu a primeira leitura.

O comportamento das leituras repetíveis modernas é abordado em detalhes pela especificação de leituras repetíveis .

Observe que as leituras repetíveis modernas só podem ser usadas com servidores MongoDB 3.6 e superiores. Quando usado com servidor MongoDB 3.4 e inferiores, o Ruby versão 2.9.0 e superior não repetirá leituras por padrão - a aplicação deve solicitar explicitamente leituras legado definindo a opção retry_reads: false do cliente ou usando a opção retryReads=false URI.

O comportamento de novas tentativas de leitura legado do Ruby está disponível definindo a opção retry_reads: false do cliente ou passando a opção retryReads=false URI para o cliente.

Ao usar o comportamento de novas tentativas de leitura legado, o número de novas tentativas pode ser definido especificando a opção max_read_retries do cliente. Ao usar a versão 2.9.0 ou superior do driver, o conjunto de operações que seria repetido com leituras repetíveis legadas é idêntico ao descrito acima para leituras repetíveis modernas. Em versões mais antigas do driver, o comportamento das retryable writes legadas era diferente, pois algumas das operações não eram repetidas.

A partir da versão 2.9.0 do driver, as novas tentativas de leitura legadas executam a seleção do servidor antes de tentar novamente a operação, como fazem as gravações repetíveis modernas. Nas versões mais antigas do driver, as tentativas de leitura seriam enviadas para o mesmo servidor para o qual a leitura inicial foi enviada.

Para desabilitar todas as tentativas de leitura, defina as seguintes opções do cliente: retry_reads: false, max_read_retries: 0.

O driver implementa dois mecanismos para tentar novamente as gravações: moderno e legado. A partir da versão 2.9.0 do driver, o mecanismo moderno é usado por padrão em servidores que o suportam, e o mecanismo legado é preterido e desabilitado por padrão em todas as versões do servidor.

Os seguintes métodos de gravação usados nas operações diárias em collection estão sujeitos a novas tentativas de gravação:

  • collection#insert_one

  • collection#update_one

  • collection#delete_one

  • collection#replace_one

  • collection#find_one_and_update

  • collection#find_one_and_replace

  • collection#find_one_and_delete

  • collection#bulk_write (para todas as operações de declaração única, ou seja, não para update_many ou delete_many)

O mecanismo moderno tentará novamente a falha nas gravações uma vez, quando o driver estiver conectado a um conjunto de réplicas MongoDB 3.6 ou superior ou a um cluster fragmentado, porque exige um oplog no seridor. O mecanismo moderno não tentará novamente as gravações quando o driver estiver conectado a um MongoDB Server autônomo ou a versões 3.4 ou anteriores do servidor.

Os erros a seguir farão com que as gravações sejam repetidas:

  • Erros de rede, incluindo tempos limite

  • erros "não mestre"

  • erros "o nó está se recuperando"

Antes de tentar novamente a gravação, o driver realizará a seleção do servidor, pois o servidor para o qual a gravação original foi enviada provavelmente não pode mais ser usado.

Se o mecanismo moderno de gravações repetidas for desabilitado pela configuração da opção retry_writes: false do cliente ou pelo uso da opção URI retryWrites=false , o driver utilizará o mecanismo legado de gravações repetidas. O mecanismo legado tenta novamente gravações nas mesmas operações que o mecanismo moderno. Por padrão, o mecanismo legado tenta novamente uma vez, como o mecanismo moderno faz; para alterar o número de tentativas, defina a opção :max_write_retries do cliente.

A diferença entre os mecanismos de nova tentativa legados e modernos é que o mecanismo legado tenta novamente gravações para um conjunto diferente de erros em comparação com o mecanismo moderno e, especificamente, não tenta novamente gravações quando um tempo limite de rede é encontrado.

Para desabilitar todas as tentativas de gravação, defina as seguintes opções do cliente: retry_writes: false, max_write_retries: 0.

Você pode usar o registrador de driver global padrão ou definir o seu. Para definir o seu:

Mongo::Logger.logger = other_logger

Consulte a documentação do Ruby Logger para obter mais informações sobre a API padrão do registrador e os níveis disponíveis.

Para alterar o nível do registrador:

Mongo::Logger.logger.level = Logger::WARN

Para obter mais controle, um registrador pode ser passado para um cliente para controle por cliente sobre o registro.

my_logger = Logger.new(STDOUT)
Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test', :logger => my_logger )

O registro padrão trunca os registros em 250 caracteres por padrão. Para desativar isso, passe uma opção para a instância do cliente.

Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test', :truncate_logs => false )

Para usar a compactação de protocolo de conexão, pelo menos um compressor deve ser explicitamente solicitado usando a opção Ruby :compressors ou a opção compressors URI. Se nenhum compressor for explicitamente solicitado, o driver não usará a compressão, mesmo que as dependências necessárias para um ou mais compressores estejam presentes no sistema.

O driver escolhe o primeiro compressor dos solicitados que também é suportado pelo servidor. Atualmente, o driver suporta os compressores zstd, snappy e zlib . O compressor zstd é recomendado, pois produz a maior compressão com o mesmo consumo de CPU em comparação com os outros compressores. Para compatibilidade máxima do servidor, todos os três compressores podem ser especificados, por exemplo, como compressors: ["zstd", "snappy", "zlib"].

zstd compressor requer o zstd-ruby biblioteca a ser instalada. snappy O compressor requer o snappy biblioteca a ser instalada. Se a compactação zstd ou snappy for solicitada e a respectiva biblioteca não for carregável, o driver gerará um erro durante a criação do Mongo::Client . A compactação zlib requer que a extensão de biblioteca padrão zlib esteja presente.

O suporte do servidor para vários compressores é o seguinte:

  • zstd exige e é habilitado por padrão no MongoDB 4.2 ou superior.

  • snappy requer MongoDB 3.4 ou superior e está habilitado por padrão no MongoDB 3.6 ou superior.

  • zlib requer MongoDB 3.6 ou superior e é habilitado por padrão no MongoDB 4.2 e superior.

A partir do MongoDB 5.0, os aplicativos podem solicitar que o servidor se comporte de acordo com uma versão específica da API do servidor.

Os parâmetros da API do servidor podem ser especificados por meio da opção :server_api para Client. Esses parâmetros não podem ser fornecidos por meio de um URI.

Atualmente, a única versão de API definida é "1". Ele pode ser solicitado da seguinte forma:

client = Mongo::Client.new(['localhost'], server_api: {version: "1"})

MongoDB Server define versões da API como valores de string. Para conveniência, se a versão da API for fornecida como um número inteiro, o driver Ruby a stringificará e a enviará ao servidor como uma string:

client = Mongo::Client.new(['localhost'], server_api: {version: 1})

Observe que o servidor pode definir versões de API que não são inteiras em string. Os aplicativos não devem presumir que todas as versões legais da API podem ser expressas como números inteiros.

Quando uma determinada versão de API é solicitada, as operações que fazem parte dessa versão da API se comportam conforme especificado nessa versão da API. As operações que não fazem parte da versão de API especificada se comportam como se a versão de API não tivesse sido especificada. As operações cujo comportamento está sujeito à versão da API configurada são comandos, incluindo argumentos de comando, query, estágios de pipeline de agregação e argumentos.

Os aplicativos podem solicitar que o servidor rejeite todas as operações que não fazem parte da versão da API especificada definindo a opção :strict :

client = Mongo::Client.new(['localhost'], server_api: {version: "1", strict: true})

Por exemplo, como a opção :tailable não faz parte da API do servidor versão 1, a seguinte query falharia:

client = Mongo::Client.new(['localhost'], server_api: {version: "1", strict: true})
client['collection'].find({}, tailable: true)
# => Mongo::Error::OperationFailure (BSON field 'FindCommand.tailable' is not allowed with apiStrict:true. (323) (on localhost:27017, modern retry, attempt 1))

Os aplicativos podem solicitar que o servidor rejeite todas as operações que estão obsoletas na versão da API especificada, configurando a opção :deprecation_errors :

client = Mongo::Client.new(['localhost'], server_api: {version: "1", deprecation_errors: true})

Observe que, no momento em que este artigo foi escrito, não há operações obsoletas na versão "1" da API.

Se os parâmetros da API do servidor tiverem sido definidos em um objeto Client , eles serão enviados pelo cliente como parte de cada operação executada [1] .

[1] getMore comandos e comandos em transação não aceitam parâmetros de API, portanto, o driver não os enviará nesses casos.

O MongoDB Server anterior ao 5.0 não reconhece os parâmetros da API e produzirá uma variedade de erros caso a aplicação os configure. O driver Ruby enviará os parâmetros de API para todos os servidores do MongoDB 3.6 e mais recentes, mas os parâmetros da API só devem ser configurados quando o aplicativo estiver se comunicando com os servidores do MongoDB 5.0 ou mais recentes. Os parâmetros da API não podem ser enviados para servidor MongoDB 3.4 e mais antigos que usam o protocolo de conexão legado; se uma aplicação configurar os parâmetros da API e se conectar ao MongoDB 3.4 ou servidor mais antigos, o driver produzirá um erro em cada operação.

O auxiliar de comando permite que o aplicativo envie comandos construídos manualmente para o servidor. Se o cliente não estiver configurado com parâmetros de API do servidor, o auxiliar de comando poderá ser usado para emitir comandos com parâmetros de API:

client.database.command(
ping: 1,
apiVersion: "1",
apiStrict: false,
apiDeprecationErrors: false,
)

Se o cliente estiver configurado com parâmetros de API do servidor, o auxiliar de comando não poderá ser usado para emitir comandos com parâmetros de API do servidor. Isso inclui o caso em que os parâmetros da API do servidor fornecidos ao cliente e ao auxiliar de comando são idênticos. Se um cliente for construído com parâmetros de API do servidor, para enviar parâmetros de API diferentes (ou nenhum), um novo cliente deverá ser construído, do zero ou usando o método with .

Os parâmetros da API do servidor só podem ser especificados no nível do cliente. Eles não podem ser especificados no reconhecimento de data center, collection, sessão, transação ou nível de operação individual.

A configuração padrão do impulsionador é adequada para o sistema de produção. Em desenvolvimento, algumas configurações podem ser ajustadas para proporcionar uma melhor experiência ao desenvolvedor.

  • :server_selection_timeout: defina isso como um valor baixo (por exemplo, 1) se o servidor MongoDB estiver sendo executado localmente e você o iniciar manualmente. Um tempo limite de seleção de servidor baixo fará com que o driver falhe rapidamente quando não houver nenhum servidor em execução.

Considere o seguinte ao implantar um aplicativo usando o driver Ruby na produção:

  • A partir da versão 2.11 do driver, a opção :min_pool_size do cliente é totalmente respeitada - o driver criará esse número de conexões para cada servidor identificado como autônomo, primary ou secundário. Nas versões anteriores do driver, o driver criava conexões sob demanda. Os aplicativos que usam :min_pool_size verão um aumento no número de conexões ociosas em todos os servidores a partir da versão 2.11 do driver e, especialmente, nos secundários em implantações de conjuntos de réplicas e nos nós em clusters fragmentados.

  • Se o aplicativo for submetido a proxy reverso por outro servidor da web ou um balanceador de carga, server_selection_timeout geralmente deve ser definido como um valor mais baixo do que o tempo limite de leitura do proxy reverso. Por exemplo, otempo limite da 30 solicitação do Herói é segundos e não é configurável; se implantar um aplicativo Ruby usando MongoDB no Herói, considere reduzir o tempo limite de seleção do servidor para 20 ou 15 segundos.

A seguir está uma lista de sinalizadores de recursos que o mongo Ruby Driver fornece:

bandeira
Descrição

broken_view_aggregate

Quando esse sinalizador estiver desativado, uma agregação feita em uma visualização será executada sobre os documentos incluídos nessa visualização, em vez de todos os documentos da collection. Quando esse sinalizador está ativado, o filtro de visualização é ignorado e a aggregation é aplicada sobre todos os documentos na collection do modo de exibição. (padrão: verdadeiro)

broken_view_options

Quando esse sinalizador estiver desativado, as opções de visualização serão propagadas corretamente para os métodos aggregate, count, count_documents, distinct e estimated_document_count . Quando esse sinalizador estiver ativado, as opções de visualização serão ignoradas nesses métodos. (padrão: verdadeiro)

validate_update_replace

Valida que não há operadores atômicos (aqueles que começam com $) na raiz de um documento de substituição e que há apenas operadores atômicos na raiz de um documento de atualização. Se esse sinalizador de recurso estiver ativado, será gerado um erro em uma atualização ou documento de substituição inválido; caso contrário, um aviso será gerado nos registros. (padrão: falso)

Estes sinalizadores de feição podem ser definidos diretamente no módulo Mongo ou utilizando o método options :

Mongo.validate_update_replace = true
Mongo.options = { validate_update_replace: true }

Voltar

Conexão & configuração