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?
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);
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) {...}