Visão geral
Neste guia, você verá como usar bancos de dados e collections do MongoDB com o driver Ruby.
O MongoDB organiza os dados em uma hierarquia dos seguintes níveis:
Bancos de dados: o nível mais alto de organização de dados em uma instância do MongoDB.
Collections: o MongoDB armazena documentos em collections. Elas são análogas às tabelas do banco de dados relacional.
Documentos: contêm dados literais, como string, números, datas e outros documentos incorporados.
Para obter mais informações sobre os tipos e estrutura de campos de documentos, consulte o guia Documentos no manual do MongoDB Server .
Acessar um banco de dados
Acesse um banco de dados criando uma instância do Mongo::Client
com o nome do banco de dados desejado.
O exemplo a seguir acessa um banco de dados denominado test_database
:
client = Mongo::Client.new(['127.0.0.1:27017'], database: 'test_database') database = client.database
Acessar uma coleção
Acesse uma collection usando o método []
em uma instância do seu banco de dados.
O exemplo a seguir acessa uma coleção denominada test_collection
:
database = client.database collection = database['test_collection']
Dica
Se o nome da coleção fornecido ainda não existir no banco de dados, o MongoDB criará implicitamente a coleção quando você inserir os dados pela primeira vez nela.
Criar uma coleção
Embora o driver Ruby para MongoDB não tenha um método create_collection
direto, você pode usar o método create
para criar uma coleção com opções específicas.
O exemplo a seguir cria uma coleção chamada sample_collection com opções específicas:
database = client.database database[:example_collection].create(capped: true, size: 1024)
Você pode especificar opções de collection, como tamanho máximo, regras de validação de documento e outras, passando-as como argumentos para o método de comando com o comando create. Para obter uma lista completa de parâmetros opcionais, consulte a documentação do MongoDB sobre o comando create.
Obter uma lista de coleções
Você pode executar query de uma lista de coleções em um banco de dados ligando para o método collections
. Este método retorna uma array de objetos de collection no banco de dados.
O exemplo a seguir chama o método collections
e itera sobre a array para imprimir os resultados:
database = client.database collection_list = database.collections collection_list.each do |collection| puts collection.name end
Para executar query somente dos nomes das collections no banco de dados, chame o método collection_names
da seguinte forma:
database = client.database collection_names = database.collection_names collection_names.each do |name| puts name end
Observação
A lista de objetos do database.collections
fornece informações mais detalhadas (ou seja, cada objeto de coleção pode ser consultado adicionalmente para metadados), enquanto o database.collection_names
simplesmente lista os nomes da coleção.
Excluir uma coleção
Você pode excluir uma coleção do banco de dados utilizando o método drop
.
O exemplo a seguir exclui a collection test_collection
:
database = client.database collection = database[:test_collection] collection.drop
Aviso
Eliminar uma coleção exclui todos os dados da coleção
Descartar uma collection do seu banco de dados exclui permanentemente todos os documentos e todos os índices dessa collection.
Solte uma coleção somente se os dados nela não forem mais necessários.
Configurar operações de leitura e escrita
Você pode controlar como o driver direciona as operações de leitura definindo uma read preference. Você também pode controlar as opções de como o driver aguarda a confirmação das operações de leitura e gravação em um conjunto de réplicas, definindo uma read concern e uma write concern.
Por padrão, os bancos de dados herdam essas configurações da instância Mongo::Client
e as collections as herdam do banco de dados. No entanto, você pode alterar essas configurações em seu banco de dados ou coleção usando um dos seguintes métodos:
database.with
: Obtém o banco de dados e aplica a nova preferência de leitura, preocupação de leitura e preocupação de gravação.collection.with
: Obtém a coleção e aplica a nova preferência de leitura, preocupação de leitura e preocupação de gravação.
Para alterar as configurações de leitura ou escrita com os métodos anteriores, chame o método e passe a nova preferência de leitura, preocupação de leitura ou preocupação de gravação.
O exemplo a seguir mostra como alterar a preferência de leitura, preocupação de leitura e write preference de um banco de dados chamado test-database
com o método database.with
:
database_with_settings = client.use('test_database').with( read: { mode: :secondary }, read_concern: { level: :local }, write: { w: :majority } )
O exemplo a seguir mostra como alterar a preferência de leitura, preocupação de leitura e preocupação de gravação de uma collection:
collection_with_settings = client[:test_collection].with( read: { mode: :secondary }, read_concern: { level: :local }, write: { w: :majority } )
Para saber mais sobre as configurações de leitura e gravação, consulte os seguintes guias no manual do MongoDB Server :
Conjuntos de tags
No MongoDB Server, você pode aplicar tags de valor-chave a membros do conjunto de réplicas de acordo com qualquer critério que você escolher. Você pode então usar essas tags para direcionar um ou mais nós para uma operação de leitura.
Por padrão, o driver Ruby do MongoDB seleciona membros primários para operações de leitura. Você pode modificar esse comportamento definindo preferências de leitura e, opcionalmente, conjuntos de tags.
No exemplo de código a seguir, o conjunto de tags passado para o parâmetro :read
instrui o driver Ruby a preferir leituras do centro de dados de Nova York ('dc':'ny'
) e a voltar para o centro de dados de São Francisco ('dc':'sf'
):
client = Mongo::Client.new(['IP_ADDRESS_001:27017'], database: 'test', read: { mode: :secondary, tag_sets: [{'dc' => 'ny'}, {'dc' => 'sf'}] }) database = client.database collection = database[:example_collection]
Para saber mais sobre conjuntos de réplicas, consulte a página Membros do conjunto de réplicas manuais do MongoDB Server .
LocalThreshold
Se vários membros do conjunto de réplicas corresponderem à preferência de leitura e aos conjuntos de tags especificados, o driver Ruby lerá a partir dos membros do conjunto de réplicas mais próximos de clusters fragmentados, escolhidos de acordo com o tempo de ping .
Por padrão, o driver usa somente os membros cujos tempos de ping estão dentro de 15 milissegundos do membro mais próximo para queries. Para distribuir leituras entre nós com latências mais altas, passe a opção local_threshold
para o construtor Mongo::Client
.
O exemplo a seguir especifica um limite local de 35 milissegundos:
client = Mongo::Client.new( ['IP_ADDRESS_001:27017'], database: 'test_database', read: { mode: :secondary_preferred }, local_threshold: 35 ) database = client.database collection = database[:example_collection] result = collection.find({}).first puts result
No exemplo anterior, o driver Ruby distribui leituras entre nós correspondentes dentro de 35 milissegundos do tempo de ping do nó mais próximo.
Observação
O driver Ruby ignora o valor de local_threshold
ao se comunicar com um conjunto de réplicas por meio mongos
de uma instância. Nesse caso, use a opção de linha de comando localThreshold.
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: