Visão geral
Neste guia, você pode aprender como especificar uma query usando o driver Ruby.
Você pode refinar o conjunto de documentos que uma query retorna criando um filtro de query. Um filtro de query é uma expressão que especifica os critérios de pesquisa que o MongoDB usa para corresponder a documentos em uma operação de leitura ou gravação. Em um filtro de query, você pode solicitar ao driver que pesquise documentos que tenham uma correspondência exata à sua query ou pode compor filtros de query para Express critérios de correspondência mais complexos.
Dados de amostra
Os exemplos deste guia executam operações na coleção fruits
, que contém documentos representando frutas. O exemplo de código a seguir mostra como criar um banco de dados e uma coleção e, em seguida, inserir os documentos de exemplo em sua coleção:
database = client.use('db') collection = database[:fruits] # Inserts documents representing fruits fruits = [ { _id: 1, name: 'apples', qty: 5, rating: 3, color: 'red', type: ['fuji', 'honeycrisp'] }, { _id: 2, name: 'bananas', qty: 7, rating: 4, color: 'yellow', type: ['cavendish'] }, { _id: 3, name: 'oranges', qty: 6, rating: 2, type: ['naval', 'mandarin'] }, { _id: 4, name: 'pineapples', qty: 3, rating: 5, color: 'yellow' } ] collection.insert_many(fruits)
Correspondência exata
Consultas de valor literal retornam documentos que têm uma correspondência exata ao seu filtro de consulta.
O exemplo seguinte especifica um filtro de consulta como um parâmetro para o método find
. O código retorna todos os documentos em que o valor do campo color
é 'yellow'
:
filter = { color: 'yellow' } results = collection.find(filter) results.each do |doc| puts doc end
{"_id"=>2, "name"=>"bananas", "qty"=>7, "rating"=>4, "color"=>"yellow", "type"=>["cavendish"]} {"_id"=>4, "name"=>"pineapples", "qty"=>3, "rating"=>5, "color"=>"yellow"}
Observação
Localizar todos os documentos
Para localizar todos os documentos em uma coleção, chame o método find
sem passar nenhum parâmetro:
results = collection.find
Operadores de comparação
Os operadores de comparação avaliam um valor de campo de documento em relação a um valor especificado em seu filtro de query. A seguinte lista descreve operadores de comparação comuns:
$gt
: retorna documentos em que o valor do campo fornecido é maior que o valor especificado$lte
: Retorna documentos nos quais o valor do campo fornecido é menor ou igual ao valor especificado$ne
: Retorna documentos em que o valor do campo fornecido não é igual ao valor especificado
Dica
Para visualizar uma lista completa de operadores de comparação, consulte o guia Operadores de query de comparação no manual do MongoDB Server .
O exemplo a seguir especifica um operador de comparação em um filtro de query como um parâmetro para o método find
. O código retorna todos os documentos que têm um valor de campo rating
maior que 2
:
filter = { rating: { '$gt' => 2 } } results = collection.find(filter) results.each do |doc| puts doc end
{"_id"=>1, "name"=>"apples", "qty"=>5, "rating"=>3, "color"=>"red", "type"=>["fuji", "honeycrisp"]} {"_id"=>2, "name"=>"bananas", "qty"=>7, "rating"=>4, "color"=>"yellow", "type"=>["cavendish"]} {"_id"=>4, "name"=>"pineapples", "qty"=>3, "rating"=>5, "color"=>"yellow"}
Operadores lógicos
Os operadores lógicos correspondem aos documentos usando lógica aplicada aos resultados de dois ou mais conjuntos de expressões. A lista a seguir descreve cada operador lógico:
$and
: retorna documentos que correspondem às condições de todas as cláusulas$or
: retorna documentos que correspondem às condições de uma cláusula$nor
: Retorna documentos que não correspondem às condições de nenhuma cláusula$not
: retorna documentos que não correspondem à expressão
Dica
Para saber mais sobre operadores lógicos, consulte o guia Operadores lógicos de query no manual do MongoDB Server .
O exemplo seguinte especifica um operador lógico em um filtro de query como um parâmetro para o find
método. O código retorna todos os documentos que tenham um qty
valor de campo maior que 5
ou um color
valor de campo 'yellow'
de:
filter = { '$or' => [{ qty: { '$gt' => 5 } }, { color: 'yellow' }] } results = collection.find(filter) results.each do |doc| puts doc end
{"_id"=>2, "name"=>"bananas", "qty"=>7, "rating"=>4, "color"=>"yellow", "type"=>["cavendish"]} {"_id"=>3, "name"=>"oranges", "qty"=>6, "rating"=>2, "type"=>["naval", "mandarin"]} {"_id"=>4, "name"=>"pineapples", "qty"=>3, "rating"=>5, "color"=>"yellow"}
Operadores de array
Os operadores de array correspondem aos documentos com base no valor ou na quantidade de elementos em um campo de array . A lista a seguir descreve cada operador de array:
$all
: retorna documentos com arrays que contêm todos os elementos da query$elemMatch
: Retorna documentos se um elemento em seu campo de matriz corresponder a todas as condições na query$size
: retorna documentos com arrays de um tamanho especificado
Dica
Para saber mais sobre operadores de array, consulte o guia Operadores de query de array no manual do MongoDB Server .
O exemplo seguinte especifica um operador de array em um filtro de query como um parâmetro para o método find
. O código retorna todos os documentos em que o campo de array type
contém elementos 2
:
filter = { type: { '$size' => 2 } } results = collection.find(filter) results.each do |doc| puts doc end
{"_id"=>1, "name"=>"apples", "qty"=>5, "rating"=>3, "color"=>"red", "type"=>["fuji", "honeycrisp"]} {"_id"=>3, "name"=>"oranges", "qty"=>6, "rating"=>2, "type"=>["naval", "mandarin"]}
Operadores de elementos
Os operadores de elemento consultam os dados com base na presença ou tipo de campo. A lista a seguir descreve cada operador de elemento:
$exists
: Retorna documentos que contêm o campo especificado$type
: Retorna documentos que contêm um campo do tipo especificado
Dica
Para saber mais sobre os operadores de elementos, consulte o guia Operadores de query de elementos no manual do MongoDB Server .
O exemplo seguinte especifica um operador de elemento em um filtro de query como um parâmetro para o método find
. O código retorna todos os documentos que têm um campo color
:
filter = { color: { '$exists' => true } } results = collection.find(filter) results.each do |doc| puts doc end
{"_id"=>1, "name"=>"apples", "qty"=>5, "rating"=>3, "color"=>"red", "type"=>["fuji", "honeycrisp"]} {"_id"=>2, "name"=>"bananas", "qty"=>7, "rating"=>4, "color"=>"yellow", "type"=>["cavendish"]} {"_id"=>4, "name"=>"pineapples", "qty"=>3, "rating"=>5, "color"=>"yellow"}
Operadores de avaliação
Os operadores de avaliação retornam dados com base em avaliações de campos individuais ou documentos de toda a coleção. A seguinte lista descreve operadores de elemento comuns:
$text
: Executa uma pesquisa de texto nos documentos$regex
: retorna documentos que correspondem a uma expressão regular especificada$mod
: Executa uma operação de módulo no valor de um campo e retorna documentos onde o restante é um valor especificado
Dica
Para visualizar uma lista completa de operadores de avaliação, consulte o guia Operadores de query de avaliação no manual do MongoDB Server .
O exemplo seguinte especifica um operador de avaliação em um filtro de query como um parâmetro para o método find
. O código usa uma expressão regular para retornar todos os documentos nos quais o valor do campo name
tem pelo menos dois 'p'
caracteres consecutivos:
filter = { name: /p{2,}/ } results = collection.find(filter) results.each do |doc| puts doc end
{"_id"=>1, "name"=>"apples", "qty"=>5, "rating"=>3, "color"=>"red", "type"=>["fuji", "honeycrisp"]} {"_id"=>4, "name"=>"pineapples", "qty"=>3, "rating"=>5, "color"=>"yellow"}
Observação
O driver Ruby usa implicitamente o operador $regex
quando um filtro de query inclui um valor de expressão regular, conforme mostrado no exemplo anterior.
Informações adicionais
Para saber mais sobre como query documentos, consulte Consultar documentos no manual do MongoDB Server .
Para saber mais sobre como recuperar documentos usando o driver Ruby, consulte o guia Recuperar dados.
Documentação da API
Para saber mais sobre o find
método, consulte a documentação API.