Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can we implement Pagination for Mongodb Collection using mongoTemplate

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?

like image 938
Ramzan Zafar Avatar asked Aug 20 '14 07:08

Ramzan Zafar


People also ask

What is MongoRepository?

MongoRepository is an interface provided by Spring Data in the package org. springframework. data. mongodb.

Which interface provides MongoDB related operations in spring data?

MongoDB and Spring Boot interact using the MongoTemplate class and MongoRepository interface.


1 Answers

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);
like image 171
Neil Lunn Avatar answered Sep 27 '22 16:09

Neil Lunn