Search code examples
mongodbsortingpaginationspring-mongomongorepository

Spring Mongo Paging with sorting with MongoRepository


Document Structure - message{obj_id,post_id,message_time,message_text} and @key is obj_id.

Problem Statement: I just want that fetch all the data contains post_id: 'anything' with sorts on the basis of message_time and want custom paging in the result every time. Now I am implementing code mentioned below according to link:https://stackoverflow.com/a/10077534/9901300. But couldn't find where should I give different post_id every time to search result for.

Please look over below code.

public interface MessageMongoRepository extends 
MongoRepository<Message, String> {

@Query("{ 'post_id' : ?0 }")
Page<Message> findByPostIdSorted(Pageable pageable);
}

Service:

@Override
public List<Message> getByPostId(String PostId, int page, int size) {
    List<Message> messages = new ArrayList<>();
    @SuppressWarnings("deprecation")
    PageRequest request = new PageRequest(page, size, new Sort(Sort.Direction.DESC, "message_time"));
    messages = messageRepository.findByPostIdSorted(request).getContent();
    return messages;
}

Solution

  • I think this is what you are looking for :

    Repository:

    @Query("{ 'post_id' : ?0 }")
    Page<Message> findByPostId(String postId, Pageable pageable);
    

    Service

    messages = messageRepository.findByPostId(postId, request).getContent();
    

    You can just pass the postId to the method defined in the repository