Overview
En esta guía, puedes aprender a especificar una query utilizando el driver Ruby.
Puede refinar el conjunto de documentos que una query devuelve creando un filtro de query. Un filtro de query es una expresión que especifica los criterios de búsqueda que MongoDB utiliza para hacer coincidir documentos en una operación de lectura o guardado. En un filtro de query, puedes solicitar al driver que busque documentos que coincidan exactamente con tu query, o puedes combinar filtros de query para establecer criterios de coincidencia más complejos.
Datos de muestra
Los ejemplos en esta guía ejecutan operaciones en el fruits colección, que contiene documentos que representan frutas. El siguiente ejemplo de código muestra cómo crear una base de datos y una colección, y luego insertar los documentos de ejemplo en tu colección:
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)
Coincidencia exacta
Las queries de valor literal retornan documentos que tienen una coincidencia exacta con su filtro de query.
El siguiente ejemplo especifica un filtro de consulta como parámetro del método find. El código devuelve todos los documentos cuyo valor del campo color es '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"}
Nota
Encuentre todos los documentos
Para buscar todos los documentos en una colección, llamá al método find sin pasar ningún parámetro:
results = collection.find
Operadores de comparación
Los operadores de comparación evalúan el valor de un campo de documento con respecto a un valor especificado en tu filtro de query. La siguiente lista describe los operadores de comparación comunes:
$gt: Devuelve documentos en los que el valor del campo dado es mayor que el valor especificado$lte: Devuelve documentos en los que el valor del campo dado es menor o igual que el valor especificado.$ne: Devuelve documentos en los que el valor del campo dado no es igual al valor especificado
Tip
Para ver una lista completa de operadores de comparación, consulte la Comparar operadores del query guía en el manual del MongoDB Server.
El siguiente ejemplo especifica un operador de comparación en un filtro de query como parámetro del método find. El código retorna todos los documentos que tengan un valor de campo rating mayor 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
Los operadores lógicos coinciden con documentos aplicando lógica a los resultados de dos o más conjuntos de expresiones. La siguiente lista describe cada operador lógico:
$and:Devuelve documentos que coinciden con las condiciones de todas las cláusulas$or: Devuelve los documentos que cumplen con las condiciones de una cláusula$nor: Devuelve documentos que no cumplen con las condiciones de ninguna cláusula$not: Devuelve documentos que no coinciden con la expresión
Tip
Para obtener más información sobre los operadores lógicos, consulta la guía Operadores de consulta lógica en el manual del MongoDB Server.
El siguiente ejemplo especifica un operador lógico en un filtro de consulta como parámetro del find método. El código devuelve todos los documentos cuyo qty valor de campo sea mayor que 5 o cuyo color valor de campo 'yellow' sea:
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 arreglos
Los operadores de arreglo hacen coincidir documentos basados en el valor o cantidad de elementos en un campo de arreglo. La siguiente lista describe cada operador de arreglo:
$all: Devuelve documentos con arreglos que contienen todos los elementos de la query$elemMatch: Devuelve documentos si un elemento en su campo de matriz coincide con todas las condiciones de la consulta$size: Devuelve documentos con matrices de un tamaño especificado
Tip
Para obtener más información sobre los operadores de arreglo, consulta la guía Operadores del query de arreglo en el manual de MongoDB Server.
El siguiente ejemplo especifica un operador de matriz en un filtro de consulta como parámetro del método find. El código devuelve todos los documentos en los que el campo de matriz type contiene 2 elementos:
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
Los operadores de elementos consultan datos según la presencia o el tipo de campo. La siguiente lista describe cada operador de elemento:
$exists: Devuelve documentos que contienen el campo especificado$typeDevuelve los documentos que contienen un campo del tipo especificado
Tip
Para obtener más información sobre los operadores de elementos, consulte la guía Operadores de consulta de elementos en el manual de MongoDB Server.
El siguiente ejemplo especifica un operador de elemento en un filtro de consulta como parámetro del método find. El código devuelve todos los documentos que tienen un 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 evaluación
Los operadores de evaluación devuelven datos basados en evaluaciones de campos individuales o de todos los documentos de la colección. La siguiente lista describe los operadores de elementos comunes:
$text: realiza una búsqueda de texto en los documentos$regex: Devuelve documentos que coinciden con una expresión regular especificada$modRealiza una operación módulo sobre el valor de un campo y devuelve los documentos donde el resto es un valor especificado
Tip
Para ver una lista completa de operadores de evaluación, consulta la guía Operadores de consulta de evaluación en el manual del MongoDB Server.
El siguiente ejemplo especifica un operador de evaluación en un filtro de consulta como parámetro del método find. El código utiliza una expresión regular para devolver todos los documentos cuyo valor del campo name tenga al menos dos caracteres 'p' 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"}
Nota
El driver Ruby utiliza implícitamente el operador $regex cuando un filtro de query incluye un valor de expresión regular, como se muestra en el ejemplo anterior.
Información Adicional
Para obtener más información sobre cómo consultar documentos, consulte Consultar documentos en el manual de MongoDB Server.
Para aprender más sobre cómo recuperar documentos utilizando el driver Ruby, consulta la Guía sobre cómo encontrar documentos.
Documentación de la API
Para obtener más información sobre el método find, consulta la documentación de la API.