How can we implement Pagination for Mongodb Collec

2019-04-07 05:06发布

问题:

I'm a noob in mongoDb i need to implement Pagination for any specific Collection for instance say

I have a Collection Foo and i have a Fucntion that returns all the records from the Foo collection

public List<Foo> getFoo(){

}

But i need to fetch records from the Foo by implementing pagination how can i achieve this by using mongoTemplate Spring data mongodb?

回答1:

For general pagination you can use the .skip() and .limit() modifiers on the Query object which you can pass in as arguments to your method:

    Query query = new Query();
    query.addCriteria(Criteria.where("a").is("b"));
    query.skip(10);
    query.limit(10);

    List<Foo> results = mongoOperation.find(query, Foo);

With .skip() being how may results to go past and .limit() being the page size to return.

So derive an instance of MongoOperations from MongoTemplate and use a standard .find() operation from there.

Skip and limit is not the most performant option though, try to store last seen values on a natural index like _id where possible and use range queries to avoid "skipping" through 1000's of results.

    Query query = new Query();
    query.addCriteria(Criteria.where("_id").gt(lastSeen));
    query.limit(10);


回答2:

You can provide skip and limit to the query you are using, and this should help doing pagination. Take a look at method find in MongoTemplate class.

Your method should look like this:

public List<Foo> getFoo(int pageNumber, int pageSize) {...}