Overview
En esta guía, puedes aprender cómo omitir un número especificado de resultados devueltos de operaciones de lectura con el controlador de MongoDB Kotlin.
Puede omitir los resultados devueltos de una consulta mediante el uso de
skip() método. También puede omitir documentos en una etapa específica de una secuencia de agregación especificando una etapa de agregación $skip.
El método skip() toma un entero que especifica la cantidad de documentos que se omitirán del comienzo de la lista de documentos devueltos por el
EncuentraFlow.
Puede utilizar el método skip() para omitir los dos primeros documentos de la siguiente manera:
collection.find().skip(2)
Aggregates.skip() es una etapa opcional en el proceso de agregación que especifica cuántos documentos omitir del comienzo de los resultados de la etapa anterior.
Puede utilizar el método Aggregates.skip() para omitir los dos primeros documentos de la siguiente manera:
val filter = Filters.empty() val results = collection.aggregate(listOf( Aggregates.match(filter), Aggregates.skip(2)) )
Ejemplos
El siguiente ejemplo trata sobre una tienda de pinturas que vende ocho colores diferentes. Los mejores colores se venden más rápido que los demás. Un día, un cliente pregunta cuáles son los tres colores más vendidos (con menor inventario). La tienda de pinturas registra el inventario en el campo qty de su colección paint_inventory:
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 10 } { "_id": 3, "color": "blue", "qty": 9 } { "_id": 4, "color": "white", "qty": 6 } { "_id": 5, "color": "yellow", "qty": 11 } { "_id": 6, "color": "pink", "qty": 3 } { "_id": 7, "color": "green", "qty": 8 } { "_id": 8, "color": "orange", "qty": 7 }
Estos datos se modelan con la siguiente clase de datos Kotlin:
data class PaintOrder( val id: Int, val qty: Int, val color: String )
Para abordar este escenario, el almacén de pintura necesita consultar la colección paint_inventory con un filtro vacío, ordenar los documentos por el campo qty y omitir los primeros cinco resultados.
Usando un FindIterable
val filter = Filters.empty() val results = collection.find(filter) .sort(descending(PaintOrder::qty.name)) .skip(5) results.collect { println(it) }
PaintOrder(id=4, qty=6, color=white) PaintOrder(id=1, qty=5, color=red) PaintOrder(id=6, qty=3, color=pink)
El método
find()devuelve todos los documentos.El método
sort()especifica documentos para mostrar de mayor a menor según el campoqty.El método
skip()especifica omitir los primeros cinco documentos.
Uso de agregación
val filter = Filters.empty() val aggregate = listOf( Aggregates.match(filter), Aggregates.sort(descending(PaintOrder::qty.name)), Aggregates.skip(5) ) val findFlow = collection.aggregate(aggregate) findFlow.collect { println(it) }
PaintOrder(id=4, qty=6, color=white) PaintOrder(id=1, qty=5, color=red) PaintOrder(id=6, qty=3, color=pink)
La etapa
match()devuelve todos los documentos.La etapa
sort()especifica los documentos que se mostrarán del más alto al más bajo según el campoqty.La etapa
skip()especifica omitir los primeros cinco documentos.
Después de que la tienda de pinturas ejecuta la consulta, descubren que los tres colores más vendidos son rosa, rojo y blanco.
Nota
Si el valor de skip es mayor o igual que la cantidad de documentos coincidentes para una consulta, esa consulta no devuelve ningún documento.
Si el método skip() del ejemplo anterior omite los primeros nueve documentos, no se obtendrán resultados ya que la cantidad especificada excede el número de documentos coincidentes.
val filter = Filters.empty() val emptyQuery = listOf( Aggregates.match(filter), Aggregates.sort(descending(PaintOrder::qty.name)), Aggregates.skip(9) ) val findFlow = collection.aggregate(emptyQuery) findFlow.collect { println(it) }