Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Especifica un query

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

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 coincidir con documentos en una operación de lectura o escritura. En un filtro de query, puede pedirle al driver que busque documentos que coincidan exactamente con su query, o puede elaborar filtros de query para expresar criterios de coincidencia más complejos.

Nota

Clases de filtro de query

Los ejemplos de esta guía utilizan el Clase de filtros de la com.mongodb.client.model paquete para crear filtros de query. Alternativamente, puedes utilizar la clase Filters de la librería de extensión mongodb-driver-kotlin-extensions del controlador Kotlin Sync, que permite crear filtros de consulta que reconocen anotaciones de serialización.

Para ver un ejemplo que utiliza la clase Filters de la librería de extensiones, consulta query clases anotadas en la guía de serialización de datos.

Los ejemplos en esta guía ejecutan operaciones en una colección llamada fruits que contiene los siguientes documentos:

{ "_id": 1, "name": "apples", "quantity": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"] },
{ "_id": 2, "name": "bananas", "quantity": 7, "rating": 4, "color": "yellow", "type": ["cavendish"] },
{ "_id": 3, "name": "oranges", "quantity": 6, "rating": 2, "type": ["naval", "mandarin"] },
{ "_id": 4, "name": "pineapple", "quantity": 3, "rating": 5, "color": "yellow" },

Los documentos de esta colección están modelados por la siguiente clase de datos Kotlin:

data class Fruit(
@BsonId
val id: Int,
val name: String,
val quantity: Int,
val rating: Int,
val color: String,
val type: List<String>
)

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:

val uri = "<connection string URI>"
val settings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString(uri))
.retryWrites(true)
.build()
val mongoClient = MongoClient.create(settings)
val database = mongoClient.getDatabase("sample_fruit")
val collection = database.getCollection<Fruit>("fruits")
collection.insertMany(listOf(
Fruit(1, "apples", 5, 3, "red", listOf("fuji", "honeycrisp")),
Fruit(2, "bananas", 7, 4, "yellow", listOf("cavendish")),
Fruit(3, "oranges", 6, 2, null, listOf("naval", "mandarin")),
Fruit(4, "pineapples", 3, 5, "yellow", null)
))

Las queries de valores literales devuelven documentos que coinciden exactamente con su filtro de query.

El siguiente ejemplo especifica un filtro de query como parámetro para el método find(). El código devuelve todos los documentos con un valor de campo color de "yellow".

val results = collection.find(eq(Fruit::color.name, "yellow"))
results.forEach { result ->
println(result);
}
Fruit(id=2, name=bananas, quantity=7, rating=4, color=yellow, type=[cavendish])
Fruit(id=4, name=pineapples, quantity=3, rating=5, color=yellow, type=null)

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 es una lista de operadores de comparación comunes:

  • $gt: Mayor que

  • $lteMenor o igual

  • $ne≠ No es igual

Para ver una lista completa de operadores de comparación, consulta la guía Operadores de consulta de comparación 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 devuelve todos los documentos con un valor de campo rating mayor que 2.

val results = collection.find(gt(Fruit::rating.name, 2))
results.forEach { result ->
println(result)
}
Fruit(id=1, name=apples, quantity=5, rating=3, color=red, type=[fuji, honeycrisp])
Fruit(id=2, name=bananas, quantity=7, rating=4, color=yellow, type=[cavendish])
Fruit(id=4, name=pineapples, quantity=3, rating=5, color=yellow, type=null)

Los operadores lógicos sirven para coincidir con documentos mediante la lógica aplicada a los resultados de dos o más conjuntos de expresiones. La siguiente es una lista de operadores lógicos:

  • $andque devuelve todos los documentos que cumplen con las condiciones de todas las cláusulas

  • $orque devuelve todos los documentos que cumplan las condiciones de una clausula

  • $norque devuelve todos los documentos que no cumplen las condiciones de ninguna cláusula

  • $notque devuelve todos los documentos que no coinciden con la expresión

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 query como parámetro para el método find(). El código devuelve todos los documentos con un valor de campo quantity mayor que 5 o un valor de campo color de "yellow".

val results = collection.find(
or(
gt(Fruit::quantity.name, 5),
eq(Fruit::color.name, "yellow")
)
)
results.forEach { result ->
println(result)
}
Fruit(id=2, name=bananas, quantity=7, rating=4, color=yellow, type=[cavendish])
Fruit(id=3, name=oranges, quantity=6, rating=2, color=null, type=[naval, mandarin])
Fruit(id=4, name=pineapples, quantity=3, rating=5, color=yellow, type=null)

Los operadores de arreglos coinciden con documentos según el valor o la cantidad de elementos en un campo de arreglo. A continuación se encuentra una lista de los operadores de arreglos disponibles:

  • $allque devuelve documentos con arreglos que contienen todos los elementos en la query

  • $elemMatchque devuelve documentos si un elemento en su campo array cumple todas las condiciones de la query

  • $size, que devuelve todos los documentos con arreglos de un tamaño específico

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 array en un filtro de query como parámetro del método find(). El código devuelve todos los documentos con un campo de arreglo type que contiene exactamente 2 elementos.

val results = collection.find(size(Fruit::type.name, 2))
results.forEach { result ->
println(result)
}
Fruit(id=1, name=apples, quantity=5, rating=3, color=red, type=[fuji, honeycrisp])
Fruit(id=3, name=oranges, quantity=6, rating=2, color=null, type=[naval, mandarin])

Los operadores de elementos consultan datos en función de la presencia o el tipo de un campo.

Para saber más sobre los operadores de elementos, consulta 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 query como parámetro para el método find(). El código devuelve todos los documentos que tienen un campo color.

val results = collection.find(exists(Fruit::color.name))
results.forEach { result ->
println(result)
}
Fruit(id=1, name=apples, quantity=5, rating=3, color=red, type=[fuji, honeycrisp])
Fruit(id=2, name=bananas, quantity=7, rating=4, color=yellow, type=[cavendish])
Fruit(id=4, name=pineapples, quantity=3, rating=5, color=yellow, type=null)

Los operadores de evaluación devuelven datos basados en evaluaciones de campos individuales o de los documentos de toda la colección.

La siguiente es una lista de operadores de evaluación comunes:

  • $text, la cual realiza una búsqueda de texto en los documentos

  • $regexque devuelve documentos que coinciden con una expresión regular especificada

  • $mod, que realiza una operación módulo sobre el valor de un campo y devuelve los documentos donde el resto coincide con el especificado

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 query como un parámetro para el método find(). El código utiliza una expresión regular para devolver todos los documentos con un valor de campo name que tenga al menos dos caracteres "p" consecutivos.

val results = collection.find(regex(Fruit::name.name, "p{2,}"))
results.forEach { result ->
println(result)
}
Fruit(id=1, name=apples, quantity=5, rating=3, color=red, type=[fuji, honeycrisp])
Fruit(id=4, name=pineapples, quantity=3, rating=5, color=yellow, type=null)

Para aprender más sobre cómo realizar consultas de documentos, consulta 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 Kotlin Sync, consulta Buscar documentos.

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

Volver

Especifique los campos a devolver

En esta página