Classificando resultados do MongoDB usando Spring Boot com MongoTemplate
Aug 16 2020
O objetivo
Eu gostaria de ter esta consulta:
db.getCollection("employees").find().sort({
hire_date: 1
}).limit(10)
escrito com MongoTemplate no Spring Boot.
A pesquisa
Já vi muitos posts e sites sobre classificação, por exemplo
- https://www.baeldung.com/java-mongodb-aggregations
- Spring + MongoDB - MongoTemplate + Consulta de critérios
- Classificação de consulta Spring MongoDB
Tentativas
Eu tentei de várias maneiras, mas ainda não consigo descobrir como posso fazer isso. Algumas das coisas que tentei estão listadas abaixo:
@Service
public class MongoService {
@Autowired
private MongoTemplate mongoTemplate;
public Document simpleQuery() {
// 1st
mongoTemplate.aggregate(Arrays.asList(
sort(Sorts.ascending("hire_date")),
limit(10)
));
// 2nd
mongoTemplate.findAll(Employee.class).sort(new BasicDBObject("hire_date", 1));
// 3rd
mongoTemplate.findAll(Employee.class).sort((o1, o2) -> o1.getHire_date() > o2.getHire_date());
// and more...
}
}
A solução pode ser muito simples, eu acho, assim como a própria consulta, mas esses são meus primeiros passos nesse tipo de terreno. Agradeço antecipadamente por qualquer ajuda neste.
Respostas
1 varman Aug 17 2020 at 00:22
Tente isto,
Aggregation aggregation = Aggregation.newAggregation(
sort(Sort.Direction.ASC, "hire_date"),
limit(10)
).withOptions(AggregationOptions.builder().allowDiskUse(Boolean.TRUE).build());
mongoTemplate.aggregate(aggregation, mongoTemplate.getCollectionName(Employee.class), Object.class).getMappedResults();
Gibbs Aug 17 2020 at 00:23
Você pode fazer o seguinte.
- Você precisa de uma parte de consulta
//As you need to match all
Query query = new Query()
- Você precisa adicionar uma opção de classificação
//You need to use Sort class with sorting order, field name to be used for sorting
query.with(new Sort(Sort.Direction.ASC, "hire_date"));
- Você precisa adicionar a opção de paginação
final Pageable pageableRequest = PageRequest.of(0, 10);
query.with(pageableRequest);
- Você precisa adicionar um modelo
mongoTemplate(query, Employee.class)
Referência de amostra
Outra resposta útil
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino