Spring Data Mongo Template Pagination

Learn how to add pagination with Spring Data Mongo Template.

By default, Spring Mongo Template does not provide a way to search by page. It searches and returns the complete list of records.

MongoTemplate

Add pagination as follows:

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

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

// Add the desired query.

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

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

ReactiveMongoTemplate

When using ReactiveMongoTemplate, add pagination as follows:

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

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

// Add the desired query.

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));

Reference