首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用mongoTemplate分页

用mongoTemplate分页
EN

Stack Overflow用户
提问于 2015-03-13 11:00:34
回答 6查看 44.3K关注 0票数 33

我对Pageable有一个疑问:

代码语言:javascript
复制
Query query = new Query().with(new PageRequests(page, size))

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-09-24 23:23:29

的确,MongoTemplate没有带有Pageable的findXXX

但是您可以使用Spring PageableExecutionUtils

在您的示例中,它将如下所示:

代码语言:javascript
复制
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一样,PageableExecutionUtils将执行一个计数请求,并将其包装到一个不错的Page中。

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

票数 77
EN

Stack Overflow用户

发布于 2018-01-25 02:42:21

基于d0x的答案并查看弹簧码。我使用的是这个变体,它不需要添加spring数据共享,就可以消除spring启动-启动-数据-mongodb依赖。

代码语言:javascript
复制
@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;
}
票数 20
EN

Stack Overflow用户

发布于 2015-03-16 22:13:25

MongoTemplate没有返回Page的方法。find()方法返回一个普通的List

with(new PageRequests(page, size)用于内部调整skiplimit的MongoDB查询(我认为由计数查询进行)。

Page可以与MongoDB存储库一起使用,这是Spring数据存储库的一个专门案例。

因此,您必须对分页结果使用MongoRepositoryPage findAll(Pageable pageable) (实际上是从PagingAndSortingRepository继承的)。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29030542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档