Como você descobriu, o MongoTemplate não suporta a abstração de página completa. Como KneeLess disse, você pode usar o
@Query
-Anotação para fazer algumas consultas personalizadas. Caso isso não seja suficiente para você, use o Spring Repository
PageableExecutionUtils
em combinação com seu MongoTemplate. Por exemplo assim:
@Override
public Page<XXX> findSophisticatedXXX(/* params, ... */ @NotNull Pageable pageable) {
Query query = query(
where("...")
// ... sophisticated query ...
).with(pageable);
List<XXX> list = mongoOperations.find(query, XXX.class);
return PageableExecutionUtils.getPage(list, pageable,
() -> mongoOperations.count((Query.of(query).limit(-1).skip(-1), XXX.class));
}
Spring Repositories estão fazendo o mesmo. Como você pode ver aqui , eles também disparam duas consultas.