Нумерация страниц с датой для весеннего ботинка mongodb - PullRequest
2 голосов
/ 12 апреля 2020

Я делаю приложение чата. Когда я получаю историю чата пользователя, он переносит все записи, которые присутствуют в базе данных. Мне просто нужна только история чата за последние 3 дня этого пользователя. Для этого нужно применить нумерацию страниц с указанием даты.

Я делюсь своим примером кода здесь

Это контроллер:

@GetMapping("/getAllGroupChatHistory/{userId}")
    ArrayList<ResultGroupChatHistoryDTO> getAllGroupChatHistory(@PathVariable long userId){

    return messagingService.getAllGroupChatHistory(userId);
 }

Это serviceImpl


public ArrayList<ResultGroupChatHistoryDTO> getAllGroupChatHistory(long userId) {

        List<GroupEntity> groupMembers = groupRepository.findAll();

        List<GroupEntity> listgroupMembers = new ArrayList<GroupEntity>();

        groupMembers.forEach(groupMember -> {
            if (groupMember.getParticipates().contains(userId)) {
                listgroupMembers.add(groupMember);
            }
        });
        System.out.println("list" + listgroupMembers);

        List grpIds = listgroupMembers.stream().map(grpEntity -> grpEntity.getGroup_id()).collect(Collectors.toList());

        ArrayList<ResultGroupChatHistoryDTO> finalresult = new ArrayList();

        for (int val = 0; val < grpIds.size(); val++) {

            ResultGroupChatHistoryDTO rchatDTO = new ResultGroupChatHistoryDTO();

            int grpId = (int) grpIds.get(val);

            List<GroupChatEntity> senderHistory = groupChatRepository.findChatByGroupId(grpId);

            ArrayList<GroupChatHistoryDTO> message = new ArrayList();

            for (int i = 0; i < senderHistory.size(); i++) {
                GroupChatHistoryDTO chatDTO = new GroupChatHistoryDTO();
                GroupChatEntity groupChatEntity = senderHistory.get(i);
                chatDTO.setId(groupChatEntity.getSender_id());
                chatDTO.setSenderName(groupChatEntity.getReciever_name());
                chatDTO.setTime(groupChatEntity.getSent_time());
                chatDTO.setLastMessage(groupChatEntity.getMessage());
                message.add(chatDTO);
            }

            rchatDTO.setMessages(message);
            rchatDTO.setId(val);

            finalresult.add(rchatDTO);
        }

        return finalresult;
}

Я использую mongoRepository подключиться. Как мне нужно применить нумерацию страниц по дате последних 3 дней?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020
Pageable pageable = PageRequest.of(0, 10);

Query patientsDynamicQuery = new Query().with(pageable);
// Add criteria's according to your wish to Result
List<Patient> filteredPatients = 
mongoTemplate.find(query, Result.class, "patient");
Page<Patient> patientPage = PageableExecutionUtils.getPage(
        filteredPatients,
        pageable,
        () -> mongoTemplate.count(query, Patient.class));

Вы можете использовать этот код, потому что MongoDB не имеет встроенной пагинации. Вы даже можете использовать OFFSET и LIMIT после сортировки данных по дате, а затем возвращать значения по размеру 10 или больше, как вам нравится.

0 голосов
/ 12 апреля 2020

Вы можете использовать Pageable

Pageable pageable = PageRequest.of(0, 20, Sort.by("sent_time").descending())

groupChatRepository.findChatByGroupId(grpId, pageable);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...