【问题标题】:How can we implement Pagination for Mongodb Collection using mongoTemplate我们如何使用 mongoTemplate 为 Mongodb Collection 实现分页
【发布时间】:2014-10-13 11:56:54
【问题描述】:
我是 mongoDb 的菜鸟,我需要为任何特定的集合实现分页,例如说
我有一个 Collection Foo,我有一个返回 Foo 集合中所有记录的函数
public List<Foo> getFoo(){
}
但我需要通过实现分页从 Foo 中获取记录,我如何通过使用 mongoTemplate Spring 数据 mongodb 来实现这一点?
【问题讨论】:
标签:
java
mongodb
pagination
mongodb-query
【解决方案1】:
对于一般分页,您可以在 Query 对象上使用 .skip() 和 .limit() 修饰符,您可以将它们作为参数传递给您的方法:
Query query = new Query();
query.addCriteria(Criteria.where("a").is("b"));
query.skip(10);
query.limit(10);
List<Foo> results = mongoOperation.find(query, Foo);
.skip() 是过去的结果,.limit() 是要返回的页面大小。
因此,从 MongoTemplate 派生一个 MongoOperations 实例,并从那里使用标准的 .find() 操作。
虽然跳过和限制不是最高效的选项,但请尽量将上次看到的值存储在自然索引中,例如 _id,并使用范围查询来避免“跳过”1000 个结果。
Query query = new Query();
query.addCriteria(Criteria.where("_id").gt(lastSeen));
query.limit(10);
【解决方案2】:
您可以为正在使用的查询提供跳过和限制,这应该有助于进行分页。
看看 MongoTemplate 类中的方法find。
你的方法应该是这样的:
public List<Foo> getFoo(int pageNumber, int pageSize) {...}