Docs Menu
Docs Home
/ /

Especifica un query

En esta guía, puedes aprender cómo especificar una query usando el driver Scala.

Puede refinar el conjunto de documentos que devuelve una consulta creando un filtro de consulta. Un filtro de consulta es una expresión que especifica los criterios de búsqueda que MongoDB utiliza para encontrar documentos en una operación de lectura o escritura.

Puede usar operadores de consulta para expresar criterios de coincidencia más complejos en un filtro de consulta. El controlador de Scala incluye un Filters clase que proporciona métodos auxiliares para aplicar operadores de consulta.

Tip

Para ver una lista completa de los métodos auxiliares Filters, consulte la Documentación de la APIde filtros.

Los ejemplos de esta guía ejecutan operaciones en la colección fruits, 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 muestra en la colección:

val uri: String = "<connection string>"
val client: MongoClient = MongoClient(uri)
val database: MongoDatabase = client.getDatabase("db")
val collection: MongoCollection[Document] = database.getCollection("fruits")
// Inserts documents representing fruits
val fruits: Seq[Document] = Seq(
Document("_id" -> 1, "name" -> "apples", "qty" -> 5, "rating" -> 3, "color" -> "red", "type" -> Seq("fuji", "honeycrisp")),
Document("_id" -> 2, "name" -> "bananas", "qty" -> 7, "rating" -> 4, "color" -> "yellow", "type" -> Seq("cavendish")),
Document("_id" -> 3, "name" -> "oranges", "qty" -> 6, "rating" -> 2, "type" -> Seq("naval", "mandarin")),
Document("_id" -> 4, "name" -> "pineapples", "qty" -> 3, "rating" -> 5, "color" -> "yellow")
)
val result = collection.insertMany(fruits)
.subscribe((result: InsertManyResult) => println(result))

Las consultas de valor literal devuelven documentos que coinciden exactamente con su filtro de consulta.

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":

val filter = equal("color", "yellow")
collection.find(filter).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_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 encontrar todos los documentos en una colección, llame al método find() sin pasar ningún parámetro:

collection.find()

Los operadores de comparación evalúan el valor de un campo de documento con respecto a un valor especificado en el filtro de consulta. La siguiente lista define operadores de comparación comunes y sus correspondientes métodos auxiliares Filters:

Operador de consulta
Método de ayuda
Descripción

$gt

gt()

Matches documents in which the value of the given field is greater than the specified value.

$lte

lte()

Matches documents in which the value of the given field is less than or equal to the specified value.

$ne

ne()

Matches documents in which the value of the given field does not equal the specified value.

Tip

Para ver una lista completa de operadores de comparación, consulte la guía Operadores de consulta de comparación en el manual de MongoDB Server.

El siguiente ejemplo pasa un filtro de consulta al método find() y utiliza el método gt() para aplicar el operador de comparación $gt. El código devuelve todos los documentos cuyo valor del campo rating sea mayor que 2:

val filter = gt("rating", 2)
collection.find(filter).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_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"}

Los operadores lógicos comparan documentos mediante la lógica aplicada a los resultados de dos o más conjuntos de expresiones. La siguiente tabla describe cada operador lógico y su método auxiliar Filters correspondiente:

Operador de consulta
Método de ayuda
Descripción

$and

and()

Matches documents that satisfy the conditions of all clauses

$or

or()

Matches documents that satisfy the conditions of one clause

$nor

nor()

Matches documents that do not satisfy the conditions of any clause

$not

not()

Matches documents that do not match the expression

Tip

Para obtener más información sobre los operadores lógicos, consulte la guía Operadores de consulta lógica en el manual del servidor MongoDB.

El siguiente ejemplo pasa un filtro de consulta al find() método y utiliza el or() método para aplicar el $or operador lógico. El código devuelve todos los documentos cuyo qty valor del campo sea mayor que 5 o cuyo color valor del campo "yellow" sea:

val filter = or(gt("qty", 5), equal("color", "yellow"))
collection.find(filter).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_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"}

Los operadores de matriz buscan coincidencias de documentos según el valor o la cantidad de elementos en un campo de matriz. La siguiente tabla describe cada operador de matriz y su método auxiliar Filters correspondiente:

Operador de consulta
Método de ayuda
Descripción

$all

all()

Matches documents that have arrays containing all elements in the query

$elemMatch

elemMatch()

Matches documents if an element in their array field satisfies all conditions in the query

$size

size()

Matches documents that have arrays of a specified size

Tip

Para obtener más información sobre los operadores de matriz, consulte la guía Operadores de consulta de matriz en el manual del servidor MongoDB.

El siguiente ejemplo pasa un filtro de consulta al método find() y utiliza el método size() para aplicar el operador de matriz $size. El código devuelve todos los documentos en los que el campo de matriz type contiene 2 elementos:

val filter = size("type", 2)
collection.find(filter).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"]}
{"_id": 3, "name": "oranges", "qty": 6, "rating": 2, "type": ["naval", "mandarin"]}

Los operadores de elementos consultan datos según la presencia o el tipo de campo. La siguiente tabla describe cada operador de elemento y su método auxiliar Filters correspondiente:

Operador de consulta
Método de ayuda
Descripción

$exists

exists()

Matches documents that have the specified field

$type

type()

Matches documents if a field has the specified type

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 pasa un filtro de consulta al método find() y utiliza el método exists() para aplicar el operador de elemento $exists. El código devuelve todos los documentos que tienen un campo color:

val filter = exists("color")
collection.find(filter).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_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"}

Los operadores de evaluación devuelven datos basados ​​en evaluaciones de campos individuales o de los documentos de toda la colección. La siguiente tabla describe los operadores de elementos comunes y sus correspondientes métodos auxiliares Filters:

Operador de consulta
Método de ayuda
Descripción

$text

text()

Performs a text search on documents

$regex

regex()

Matches documents that have values satisfying a specified regular expression

$mod

mod()

Performs a modulo operation on the value of a field and matches documents with a specified result

Tip

Para ver una lista completa de operadores de evaluación, consulte la guía Operadores de consulta de evaluación en el manual de MongoDB Server.

El siguiente ejemplo pasa un filtro de consulta al método find() y utiliza el método regex() para aplicar el operador de evaluación $regex. 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:

val filter = regex("name", "p{2,}")
collection.find(filter).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"]}
{"_id": 4, "name": "pineapples", "qty": 3, "rating": 5, "color": "yellow"}

Para obtener más información sobre cómo consultar documentos, consulte la guía Consultar documentos en el manual de MongoDB Server.

Para obtener más información sobre cómo recuperar documentos con el controlador Scala, consulte la Guíade recuperación de datos.

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

  • find()

  • Filtros

  • insertMany()

Volver

Retrieve Data

En esta página