Spring Data Mongo Template Pagination

Spring Data Mongo Template에 페이징을 하는 방법에 대해서 알아본다.

기본적으로 Spring Mongo Template에는 페이지로 찾는 방법이 없다. 전체 레코드 목록을 검색하고 반환한다.

MongoTemplate

Pagination을 추가하려면 다음과 같이 할 수 있다.

Pageable pageable = PageRequest.of(0, 10);

Query query = new Query().with(pageable);

// 원하는 쿼리 추가한다.

List<User> list = mongoTemplate.find(query, User.class, "user");

Page<User> page = PageableExecutionUtils.getPage(
        list,
        pageable,
        () -> mongoTemplate.count(query, Patient.class));

ReactiveMongoTemplate

ReactiveMongoTemplate을 사용한 경우에 Pagination을 추가하려면 다음과 같이 할 수 있다.

Pageable pageable = PageRequest.of(0, 10);

Query query = new Query().with(pageable);

// 원하는 쿼리 추가한다.

Mono<List<User>> list = reactiveMongoTemplate.find(query, User.class, "user").collectList();

Mono<Long> count = reactiveMongoTemplate.count(query, ActiveUser.class);

Page<User> userPage = list.zipWith(count)
        .map(tuple -> PageableExecutionUtils.getPage(tuple.getT1(), param.getPageable(), tuple::getT2)

참고




최종 수정 : 2024-01-18