If the pagesize is 10 and pageNumber is 0, for the given condition, if I I get 50 documents from mongodb, then total_documents should be 50 and msList should have the details of 1st 10 documents(DTO's)(since the pageNumber is 0 i.e. pagination).
Query query = new Query();
List<Criteria> criteria = new ArrayList<>();
criteria.add(Criteria.where("di.ai").in(new ArrayList<>(Arrays.asList("123"))));
query.addCriteria(new Criteria().andOperator(criteria.toArray(new Criteria[criteria.size()])));
Long total_documents = this.mongoTemplate.count(query, NSDTO.class, MONGODB_MESSAGE_COLLECTION);
Pageable pageable = PageRequest.of((pageNumber - 1), pageSize);
query.with(pageable);
List<NSDTO> nsList= this.mongoTemplate.find(query, NSDTO.class, MONGODB_MESSAGE_COLLECTION);"
I am able to achieve this functionality using the above code, but the problem here is we are making mongodb calls 2 times.
Would it be possible to achieve the same functionality using only one mongodb call?
Could someone please help on this regard.
When pagination is performed, usually, use two queries: first query will count a total size, second query returns actual records using two parameters:
pageNumberandpageSize.These two queries are independent of each other and cannot be joined. So, it's impossible using CreteriaQuery API and in pagination themselves.