Iterate over large collection in MongoDB via spring-data Iterate over large collection in MongoDB via spring-data spring spring

Iterate over large collection in MongoDB via spring-data


Late response, but maybe will help someone in the future. Spring data doesn't provide any API to wrap Mongo DB Cursor capabilities. It uses it within find methods, but always returns completed list of objects. Options are to use Mongo API directly or to use Spring Data Paging API, something like that:

        final int pageLimit = 300;        int pageNumber = 0;        Page<T> page = repository.findAll(new PageRequest(pageNumber, pageLimit));        while (page.hasNextPage()) {            processPageContent(page.getContent());            page = repository.findAll(new PageRequest(++pageNumber, pageLimit));        }        // process last page        processPageContent(page.getContent());

UPD (!) This method is not sufficient for large sets of data (see @Shawn Bush comments) Please use Mongo API directly for such cases.


Streams as cursor:

@Query("{}")Stream<Alarm>  findAllByCustomQueryAndStream();

So for the large amount of data you can stream them and process the line by line without memory limitation


Use MongoTemplate::stream() as probably the most appropriate Java wrapper to DBCursor