Docs Menu
Docs Home
/ /

Especifica un query

En esta guía, puede aprender a especificar una consulta en el controlador MongoDB Kotlin.

La mayoría de las operaciones CRUD permiten restringir el conjunto de documentos coincidentes mediante la especificación de criterios de coincidencia en un filtro de consulta. Los filtros de consulta contienen uno o más operadores de consulta que se aplican a campos específicos y determinan qué documentos se incluirán en el conjunto de resultados.

En esta página, cubrimos los siguientes operadores de consulta con ejemplos sobre cómo usarlos:

  • Operadores de comparación

  • Operadores lógicos

  • Operadores de arreglos

  • Operadores de elementos

  • Operadores de evaluación

Los ejemplos de esta guía utilizan los siguientes documentos en el paint_purchases recopilación:

{ "_id": 1, "color": "red", "qty": 9, "vendor": ["A", "E"] }
{ "_id": 2, "color": "purple", "qty": 8, "vendor": ["B", "D", "F"], "rating": 5 }
{ "_id": 3, "color": "blue", "qty": 5, "vendor": ["A", "E"] }
{ "_id": 4, "color": "white", "qty": 6, "vendor": ["D"], "rating": 9 }
{ "_id": 5, "color": "yellow", "qty": 4, "vendor": ["A", "B"] }
{ "_id": 6, "color": "pink", "qty": 3, "vendor": ["C"] }
{ "_id": 7, "color": "green", "qty": 8, "vendor": ["C", "E"], "rating": 7 }
{ "_id": 8, "color": "black", "qty": 7, "vendor": ["A", "C", "D"] }

Estos datos se modelan con la siguiente clase de datos Kotlin:

data class PaintOrder(
@BsonId val id: Int,
val qty: Int,
val color: String,
val vendor: List<String>,
val rating: Int? = null
)

Nota

Clases de filtro de consultas

Los ejemplos de esta guía utilizan la clase Filters del com.mongodb.client.model paquete para crear filtros de consulta. Como alternativa, puede usar la clase Filters de la biblioteca de extensiones del controlador mongodb-driver-kotlin-extensions Kotlin, que permite crear filtros de consulta que reconocen anotaciones de serialización.

Para ver un ejemplo que utiliza la clase Filters de la biblioteca de extensión, consulte Consulta declases anotadas en la guía de serialización de Kotlin.

Los operadores de comparación consultan datos basándose en comparaciones con valores de una colección. Los operadores de comparación comunes incluyen gt() para comparaciones "mayores que", lte() para comparaciones "menores o iguales que" y ne() para comparaciones "diferentes a".

El siguiente ejemplo utiliza el método Filters.gt() para emparejar todos los documentos donde el valor de qty es mayor que 7 en la colección paint_purchases:

val filter = Filters.gt("qty", 7)
val findFlow = collection.find(filter)
findFlow.collect { println(it) }
PaintOrder(id=1, qty=9, color=red, vendor=[A, E], rating=null)
PaintOrder(id=2, qty=8, color=purple, vendor=[B, D, F], rating=5)
PaintOrder(id=7, qty=8, color=green, vendor=[C, E], rating=7)

Los operadores lógicos consultan datos mediante la lógica aplicada a los resultados de los operadores de campo. Los operadores lógicos comunes incluyen and(), donde todos los operadores deben ser verdaderos, y or(), donde al menos uno de los operadores debe ser verdadero.

El siguiente ejemplo utiliza el método Filters.and() para hacer coincidir documentos donde el valor de qty es menor o igual a 5 y el valor de color no es "pink" en la colección paint_purchases:

val filter = Filters.and(Filters.lte("qty", 5), Filters.ne("color", "pink"))
val findFlow = collection.find(filter)
findFlow.collect { println(it) }
PaintOrder(id=3, qty=5, color=blue, vendor=[A, E], rating=null)
PaintOrder(id=5, qty=4, color=yellow, vendor=[A, B], rating=null)

Los operadores de matriz consultan datos según el valor o la cantidad de elementos en un campo de matriz.

El siguiente ejemplo utiliza el método Filters.size() para hacer coincidir documentos donde el tamaño de la lista vendor es 3 en la colección paint_purchases:

val filter = Filters.size("vendor", 3)
val findFlow = collection.find(filter)
findFlow.collect { println(it) }
PaintOrder(id=2, qty=8, color=purple, vendor=[B, D, F], rating=5)
PaintOrder(id=8, qty=7, color=black, vendor=[A, C, D], rating=null)

Los operadores de elementos consultan datos según la presencia o el tipo de un campo.

El siguiente ejemplo utiliza el método Filters.exists() para hacer coincidir documentos que tienen un rating en la colección paint_purchases:

val filter = Filters.exists("rating")
val findFlow = collection.find(filter)
findFlow.collect { println(it) }
PaintOrder(id=2, qty=8, color=purple, vendor=[B, D, F], rating=5)
PaintOrder(id=4, qty=6, color=white, vendor=[D], rating=9)
PaintOrder(id=7, qty=8, color=green, vendor=[C, E], rating=7)

Los operadores de evaluación consultan datos sobre una lógica de nivel superior, como consultas de texto y expresiones regulares.

El siguiente ejemplo utiliza el método Filters.regex() para hacer coincidir documentos que tienen un color que termina con la letra "k" en la colección paint_purchases:

val filter = Filters.regex("color", "k$")
val findFlow = collection.find(filter)
findFlow.collect { println(it) }
PaintOrder(id=6, qty=3, color=pink, vendor=[C], rating=null)
PaintOrder(id=8, qty=7, color=black, vendor=[A, C, D], rating=null)

Para obtener más información sobre los operadores mencionados en esta guía, consulte las siguientes entradas del Manual del servidor:

Volver

Buscar documentos

En esta página