MongoTemplate과 Spring Boot를 사용하여 MongoDB 결과 정렬

Aug 16 2020

목표

이 쿼리를 갖고 싶습니다.

db.getCollection("employees").find().sort({
  hire_date: 1
}).limit(10)

Spring Boot에서 MongoTemplate으로 작성되었습니다.

연구

예를 들어 정렬에 관한 많은 게시물과 사이트를 보았습니다.

  • https://www.baeldung.com/java-mongodb-aggregations
  • Spring + MongoDB-MongoTemplate + 기준 쿼리
  • Spring MongoDB 쿼리 정렬

시도

여러 가지 방법을 시도했지만 여전히 어떻게 할 수 있는지 알 수 없습니다. 내가 시도한 것 중 일부는 다음과 같습니다.

@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...
    }
}

이 솔루션은 쿼리 자체와 마찬가지로 매우 간단 할 수 있지만 이러한 유형의 첫 번째 단계입니다. 이것에 대한 도움에 미리 감사드립니다.

답변

1 varman Aug 17 2020 at 00:22

이 시도,

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

다음과 같이 할 수 있습니다.

  1. 쿼리 부분이 필요합니다.
//As you need to match all
Query query = new Query()
  1. 정렬 옵션을 추가해야합니다.
//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"));
  1. 페이지 매김 옵션을 추가해야합니다.
final Pageable pageableRequest = PageRequest.of(0, 10);
query.with(pageableRequest);
  1. 모델을 추가해야합니다.
mongoTemplate(query, Employee.class)

샘플 참조

또 다른 유용한 답변