带有mongodb春季启动日期的分页



我正在制作聊天应用程序。当我检索用户的聊天历史记录时,它会带来数据库中的所有记录。我只需要该用户最近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天的日期对此进行分页?

您可以使用可分页

Pageable pageable = PageRequest.of(0, 20, Sort.by("sent_time").descending())
groupChatRepository.findChatByGroupId(grpId, pageable);
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或更大返回值。

最新更新