我对Pageable有一个疑问:
Query query = new Query().with(new PageRequests(page, size))我如何使用MongoTemplate来执行它?我没有看到一个返回Page<T>的方法。
发布于 2017-09-24 23:23:29
的确,MongoTemplate没有带有Pageable的findXXX。
但是您可以使用Spring 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一样,PageableExecutionUtils将执行一个计数请求,并将其包装到一个不错的Page中。
这里你可以看到春天也在做同样的事情。
发布于 2018-01-25 02:42:21
基于d0x的答案并查看弹簧码。我使用的是这个变体,它不需要添加spring数据共享,就可以消除spring启动-启动-数据-mongodb依赖。
@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;
}发布于 2015-03-16 22:13:25
MongoTemplate没有返回Page的方法。find()方法返回一个普通的List。
with(new PageRequests(page, size)用于内部调整skip和limit的MongoDB查询(我认为由计数查询进行)。
Page可以与MongoDB存储库一起使用,这是Spring数据存储库的一个专门案例。
因此,您必须对分页结果使用MongoRepository的Page findAll(Pageable pageable) (实际上是从PagingAndSortingRepository继承的)。
https://stackoverflow.com/questions/29030542
复制相似问题