Construtores de classificação
Nesta página
Visão geral
Neste guia, você pode aprender como especificar critérios de classificação para suas query usando construtores no MongoDB Kotlin Driver.
Os critérios de classificação são as regras que o MongoDB usa para classificar seus dados. Alguns exemplos de critérios de classificação são:
Do menor número para o maior número
Hora do dia mais antiga para a última hora do dia
Ordem alfabética pelo nome
Builders são classes fornecidas pelo driver Kotlin que ajudam você a construir objetosBSON . Para saber mais, consulte o guia do construtor .
Leia este guia se quiser aprender como usar construtores para especificar critérios de classificação para suas query.
Para aprender os fundamentos da classificação no driver Kotlin, consulte o guia de classificação .
Os exemplos nesta página usam uma collection de amostra que contém os seguintes documento:
{ "_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" }
Esses dados são modelados com a seguinte classe de dados Kotlin:
data class Order( val id: Int, val date: String, val orderTotal: Double, val description: String, )
A classe Classifica
A classe Sorts
é um construtor que fornece métodos de fábrica estáticos para todos os operadores de critérios de classificação suportados pelo MongoDB. Esses métodos retornam um objeto Bson
que você pode passar para o método sort()
de uma instância FindFlow
ou para Aggregates.sort()
.
Para saber mais sobre a classe Aggregates
, consulte o guia do construtor Aggregates .
Para obter mais informações sobre as classes e interfaces nesta seção, consulte a seguinte Documentação da API:
Ascendente
Para especificar uma classificação crescente, utilize o método de fábrica estática Sorts.ascending()
. Passe o nome do campo que você deseja ordenar para Sorts.ascending()
.
O exemplo a seguir classifica os documentos na coleção de amostra por ordem crescente no campo orderTotal
:
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 uma classificação decrescente, use o método de fábrica estática Sorts.descending()
. Passe o nome do campo que você deseja ordenar para Sorts.descending()
.
O exemplo a seguir classifica os documentos na coleção de amostra em ordem decrescente no campo orderTotal
:
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)
Combinando critérios de classificação
Para combinar critérios de classificação, use o método de fábrica estática Sorts.orderBy()
. Este método constrói um objeto contendo uma lista ordenada de critérios de classificação. Ao executar a classificação, se os critérios de classificação anteriores resultarem em um empate, a classificação utilizará os próximos critérios de classificação na lista para determinar a ordem.
O exemplo a seguir classifica os documentos na coleção de amostra em ordem decrescente no campo date
e, em caso de empate, ordem crescente no campo orderTotal
:
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)
Pontuação de texto
Você pode classificar os resultados da pesquisa de texto por sua pontuação de texto, um valor que indica até que ponto um resultado de pesquisa corresponde à sua string de pesquisa. Para especificar uma classificação pela pontuação de texto de uma pesquisa de texto, use o método estático de fábrica Sorts.metaTextScore()
.
Para obter um exemplo detalhado mostrando como especificar os critérios de classificação usando o método Sorts.metaTextScore()
, consulte a seção de pesquisa de texto do guia de classificação.
Para obter mais informações, consulte a classe Classificações Documentação da API.