Java分页时是否可以只调用一次数据库?

问题描述 投票:0回答:1

如果页面大小为 10 并且

pageNumber
为 0,对于给定条件,如果我从 mongodb 获取 50 个文档,

那么

total_documents
应该是50,msList应该有第1个10个文档(DTO)的详细信息(因为
pageNumber
是0,即分页)

Query query = new Query();
List<Criteria> criteria = new ArrayList<>();    criteria.add(Criteria.where("di.ai").in(new ArrayList<>(Arrays.asList("123"))));
query.addCriteria(new Criteria().andOperator(criteria.toArray(new Criteria[criteria.size()])));
Long total_documents = this.mongoTemplate.count(query, NSDTO.class, MONGODB_MESSAGE_COLLECTION);
Pageable pageable = PageRequest.of((pageNumber - 1), pageSize);
query.with(pageable);    
List<NSDTO> nsList= this.mongoTemplate.find(query, NSDTO.class, MONGODB_MESSAGE_COLLECTION);"

我可以使用上面的代码实现此功能,但这里的问题是我们进行了 mongodb 调用 2 次。

是否可以仅使用一次 mongodb 调用来实现相同的功能?

有人可以在这方面提供帮助吗?

java spring mongodb pagination criteriaquery
1个回答
0
投票

执行分页时,通常使用两个查询:第一个查询将计算总大小,第二个查询使用两个参数返回实际记录:

pageNumber
pageSize
。这两个查询是相互独立的,不能连接。所以,使用 CreteriaQuery API 是不可能的。

© www.soinside.com 2019 - 2024. All rights reserved.