Overview
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:
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( 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.
Operadores de comparación
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)
Operadores lógicos
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)
Operadores de arreglos
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)
Operadores de elementos
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)
Operadores de evaluación
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: