Visão geral
Neste guia, você pode aprender como especificar critérios de classificação para suas queries usando construtores no driver Java Reactive Streams.
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 Java Reactive Streams que o ajudam a construir objetos BSON. Para saber mais, consulte o guia do construtor.
Dica
Para maior brevidade, você pode optar por importar todos os métodos da classe Sorts estaticamente:
import static com.mongodb.client.model.Sorts.*;
Os exemplos a seguir pressupõem essa importação estática.
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 strawberry birthday cakes" }, { "_id": 3, "date": "2022-01-11", "orderTotal": 19.49, "description": "1 dozen strawberry 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": 10.99, "description": "1 bagel, 1 orange juice, 1 muffin" }, { "_id": 6, "date": "2022-01-23", "orderTotal": 60.31, "description": "one large strawberry and chocolate cake" }
A classe Classifica
A Sorts classe é 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 Bson objeto que você pode passar para o sort() método de uma FindPublisher instância ou Aggregates.sort() para. Para saber mais sobre a Aggregates classe, 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 Sorts.ascending() o nome do campo para ordenar.
O exemplo a seguir classifica os documentos na coleção de amostra por ordem crescente no campo _id :
FindPublisher<Document> findPublisher = collection.find().sort(ascending("_id")); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_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 strawberry birthday cakes" } { "_id": 3, "date": "2022-01-11", "orderTotal": 19.49, "description": "1 dozen strawberry cupcakes" } ...
Descendente
Para especificar uma classificação decrescente, use o método de fábrica estática Sorts.descending() . Passe Sorts.descending() o nome do campo para ordenar.
O exemplo a seguir classifica os documentos na coleção de amostra em ordem decrescente no campo _id :
FindPublisher<Document> findPublisher = collection.find().sort(descending("_id")); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 6, "date": "2022-01-23", "orderTotal": 60.31, "description": "one large strawberry and chocolate cake" } { "_id": 5, "date": "2022-01-23", "orderTotal": 10.99, "description": "1 bagel, 1 orange juice, 1 muffin" } { "_id": 4, "date": "2022-01-15", "orderTotal": 43.62, "description": "2 chicken lunches and a diet coke" } ...
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 mais à esquerda resultarem em um empate, a classificação usará o próximo critério 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 :
Bson orderBySort = orderBy(descending("date"), ascending("orderTotal")); FindPublisher<Document> findPublisher = collection.find().sort(orderBySort); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 5, "date": "2022-01-23", "orderTotal": 10.99, "description": "1 bagel, 1 orange juice, 1 muffin" } { "_id": 6, "date": "2022-01-23", "orderTotal": 60.31, "description": "one large strawberry and chocolate cake" } { "_id": 4, "date": "2022-01-15", "orderTotal": 43.62, "description": "2 chicken lunches and a diet coke" } { "_id": 3, "date": "2022-01-11", "orderTotal": 19.49, "description": "1 dozen strawberry cupcakes" } { "_id": 2, "date": "2022-01-11", "orderTotal": 83.87, "description": "two medium strawberry birthday cakes" } { "_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 query 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 consulta de texto, use o método de fábrica estático Sorts.metaTextScore().
Para obter mais informações, consulte a documentação da API da classe Sorts.