Ordenar los resultados de MongoDB usando Spring Boot con MongoTemplate
Aug 16 2020
La meta
Me gustaría tener esta consulta:
db.getCollection("employees").find().sort({
hire_date: 1
}).limit(10)
escrito con MongoTemplate en Spring Boot.
La investigación
He visto muchas publicaciones y sitios sobre clasificación como, por ejemplo,
- https://www.baeldung.com/java-mongodb-aggregations
- Spring + MongoDB - MongoTemplate + Consulta de criterios
- Clasificación de consultas Spring MongoDB
Intentos
Lo he intentado de muchas maneras, pero todavía no puedo entender cómo puedo hacer esto. Algunas de las cosas que he probado se enumeran a continuación:
@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...
}
}
La solución podría ser bastante simple, supongo, al igual que la consulta en sí, pero estos son mis primeros pasos en ese tipo de terreno. Gracias de antemano por cualquier ayuda en este caso.
Respuestas
1 varman Aug 17 2020 at 00:22
Prueba esto,
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
Puede hacer lo siguiente.
- Necesitas una parte de consulta
//As you need to match all
Query query = new Query()
- Necesita agregar la opción de clasificación
//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"));
- Necesitas agregar la opción de paginación
final Pageable pageableRequest = PageRequest.of(0, 10);
query.with(pageableRequest);
- Necesitas agregar un modelo
mongoTemplate(query, Employee.class)
Ejemplo de referencia
Otra respuesta útil