Overview
En esta guía, puede aprender a especificar criterios de clasificación para sus consultas utilizando generadores en el controlador MongoDB Kotlin.
Los criterios de ordenación son las reglas que MongoDB utiliza para ordenar los datos. Algunos ejemplos son:
Del número más pequeño al número más grande
Hora más temprana del día a hora más tardía del día
Orden alfabético por nombre
Los constructores son clases proporcionadas por el controlador Kotlin que le ayudan a construir ObjetosBSON. Para obtener más información, consulte la guía de creación.
Debes leer esta guía si quieres aprender a usar constructores para especificar criterios de clasificación para tus consultas.
Para aprender los conceptos básicos de la ordenación en el controlador Kotlin, consulte la guía de ordenación.
Los ejemplos de esta página utilizan una colección de muestra que contiene los siguientes documentos:
{ "_id": 1, "date": "2022-01-03", "orderTotal": 17.86, "description": "1/2 lb cream cheese and 1 dozen bagels" }, { "_id": 2, "date": "2022-01-11", "orderTotal": 83.87, "description": "two medium vanilla birthday cakes" }, { "_id": 3, "date": "2022-01-11", "orderTotal": 19.49, "description": "1 dozen vanilla cupcakes" }, { "_id": 4, "date": "2022-01-15", "orderTotal": 43.62, "description": "2 chicken lunches and a diet coke" }, { "_id": 5, "date": "2022-01-23", "orderTotal": 60.31, "description": "one large vanilla and chocolate cake" }, { "_id": 6, "date": "2022-01-23", "orderTotal": 10.99, "description": "1 bagel, 1 orange juice, 1 muffin" }
Estos datos se modelan con la siguiente clase de datos Kotlin:
data class Order( val id: Int, val date: String, val orderTotal: Double, val description: String, )
Tip
Métodos de construcción y propiedades de la clase de datos
Puedes usar los métodos de las clases de constructor directamente con las propiedades de las clases de datos añadiendo la dependencia opcional de extensiones del controlador Kotlin a tu aplicación. Para obtener más información y ver ejemplos, consulta la guía "Usar constructores con clases de datos".
La clase de clasificación
El Sorts La clase es un constructor que proporciona métodos de fábrica estáticos para todos los operadores de criterios de ordenación compatibles con MongoDB. Estos métodos devuelven un objeto Bson que se puede pasar al método sort() de una instancia FindFlow o a Aggregates.sort().
Para obtener más información sobre la Aggregates clase, consulte la guía del generador de agregados.
Para obtener más información sobre las clases e interfaces en esta sección, consulte la siguiente documentación de API:
Ascendente
Para especificar un orden ascendente, utilice el método de fábrica estático Sorts.ascending(). Pase el nombre del campo que desea ordenar a Sorts.ascending().
El siguiente ejemplo ordena los documentos de la colección de muestra en orden ascendente en el orderTotal campo:
val resultsFlow = collection.find() .sort(Sorts.ascending(Order::orderTotal.name)) resultsFlow.collect { println(it) }
Order(id=6, date=2022-01-23, orderTotal=10.99, description=1 bagel, 1 orange juice, 1 muffin) Order(id=1, date=2022-01-03, orderTotal=17.86, description=1/2 lb cream cheese and 1 dozen bagels) Order(id=3, date=2022-01-11, orderTotal=19.49, description=1 dozen vanilla cupcakes) Order(id=4, date=2022-01-15, orderTotal=43.62, description=2 chicken lunches and a diet coke) Order(id=5, date=2022-01-23, orderTotal=60.31, description=one large vanilla and chocolate cake) Order(id=2, date=2022-01-11, orderTotal=83.87, description=two medium vanilla birthday cakes)
Descendente
Para especificar un orden descendente, utilice el método de fábrica estático Sorts.descending(). Pase el nombre del campo que desea ordenar a Sorts.descending().
El siguiente ejemplo ordena los documentos de la colección de muestra en orden descendente en el orderTotal campo:
val resultsFlow = collection.find() .sort(Sorts.descending(Order::orderTotal.name)) resultsFlow.collect { println(it) }
Order(id=2, date=2022-01-11, orderTotal=83.87, description=two medium vanilla birthday cakes) Order(id=5, date=2022-01-23, orderTotal=60.31, description=one large vanilla and chocolate cake) Order(id=4, date=2022-01-15, orderTotal=43.62, description=2 chicken lunches and a diet coke) Order(id=3, date=2022-01-11, orderTotal=19.49, description=1 dozen vanilla cupcakes) Order(id=1, date=2022-01-03, orderTotal=17.86, description=1/2 lb cream cheese and 1 dozen bagels) Order(id=6, date=2022-01-23, orderTotal=10.99, description=1 bagel, 1 orange juice, 1 muffin)
Combinación de criterios de ordenación
Para combinar criterios de ordenación, utilice el método de fábrica estático Sorts.orderBy(). Este método construye un objeto que contiene una lista ordenada de criterios de ordenación. Al realizar la ordenación, si los criterios de ordenación anteriores resultan en un empate, se utiliza el siguiente criterio de ordenación de la lista para determinar el orden.
El siguiente ejemplo ordena los documentos de la colección de muestra en orden descendente en el date campo y, en caso de empate, en orden ascendente en el orderTotal campo:
val orderBySort = Sorts.orderBy( Sorts.descending(Order::date.name), Sorts.ascending(Order::orderTotal.name) ) val results = collection.find().sort(orderBySort) results.collect {println(it) }
Order(id=6, date=2022-01-23, orderTotal=10.99, description=1 bagel, 1 orange juice, 1 muffin) Order(id=5, date=2022-01-23, orderTotal=60.31, description=one large vanilla and chocolate cake) Order(id=4, date=2022-01-15, orderTotal=43.62, description=2 chicken lunches and a diet coke) Order(id=3, date=2022-01-11, orderTotal=19.49, description=1 dozen vanilla cupcakes) Order(id=2, date=2022-01-11, orderTotal=83.87, description=two medium vanilla birthday cakes) Order(id=1, date=2022-01-03, orderTotal=17.86, description=1/2 lb cream cheese and 1 dozen bagels)
Puntuación del texto
Puede ordenar los resultados de una consulta de texto por su puntuación, un valor que indica la precisión con la que un resultado coincide con su cadena de búsqueda. Para especificar una ordenación por puntuación, utilice el método de fábrica estático Sorts.metaTextScore().
Para obtener un ejemplo detallado que muestra cómo especificar criterios de clasificación utilizando el Sorts.metaTextScore() método, consulte la sección de consulta de texto de la guía de clasificación.
Para obtener más información, consulte la documentación de la API de la clase Sorts.