使用 mongoTemplate 进行分页

2022-09-01 09:07:36

我有一个可分页的查询:

Query query = new Query().with(new PageRequests(page, size))

我如何使用MongoTemplate执行它?我没有看到一个方法返回。Page<T>


答案 1

确实,Pageables没有。MongoTemplatefindXXX

但是您可以使用Spring Repository来实现此目的。PageableExecutionUtils

在您的示例中,它看起来像这样:

Pageable pageable = new PageRequests(page, size);
Query query = new Query().with(pageable);
List<XXX> list = mongoTemplate.find(query, XXX.class);
return PageableExecutionUtils.getPage(
                       list, 
                       pageable, 
                       () -> mongoTemplate.count(Query.of(query).limit(-1).skip(-1), XXX.class));

就像在原来的Spring Data Repository中一样,它将执行计数请求并将其包装成一个适合您的。PageableExecutionUtilsPage

在这里,你可以看到春天也在做同样的事情。


答案 2

基于d0x的答案并查看弹簧代码。我正在使用这种变体,它适用于spring-boot-starter-data-mongodb依赖关系,而无需添加spring数据共享。

@Autowired
private MongoOperations mongoOperations;

@Override
public Page<YourObjectType> searchCustom(Pageable pageable) {
    Query query = new Query().with(pageable);
    // Build your query here

    List<YourObjectType> list = mongoOperations.find(query, YourObjectType.class);
    long count = mongoOperations.count(query, YourObjectType.class);
    Page<YourObjectType> resultPage = new PageImpl<YourObjectType>(list , pageable, count);
    return resultPage;
}

推荐