1. 分页动态查询
@Autowired
private MongoTemplate mongoTemplate;
@Override
public Page<WeightedRecord> list(WeightedRecordDto wr) {
Pageable pageable = PageRequest.of(0, 10);
Integer pageSize = wr.getPageSize();
Integer pageNum = wr.getPageNum();
if (Objects.nonNull(pageNum) && Objects.nonNull(pageSize)) {
pageable = PageRequest.of(pageNum-1, pageSize);
}
if (Objects.isNull(wr)) {
return weightedRecordRepository.findAll(pageable);
} else {
Query mongoQuery = new Query();
Sort sorts = Sort.by(Sort.Direction.DESC, "ts");
mongoQuery.with(sorts);
if (StringUtils.isNotEmpty(wr.getChannel())) {
mongoQuery.addCriteria(Criteria.where("channel").is(wr.getChannel()));
}
if (StringUtils.isNotEmpty(wr.getInstId())) {
mongoQuery.addCriteria(Criteria.where("instId").regex(wr.getInstId()));
}
if (Objects.nonNull(wr.getTsStart()) && Objects.nonNull(wr.getTsEnd())) {
mongoQuery.addCriteria(Criteria.where("ts").gt(wr.getTsStart()));
mongoQuery.addCriteria(Criteria.where("ts").lt(wr.getTsEnd()));
}
mongoQuery.with(pageable);
final long count = mongoTemplate.count(mongoQuery, WeightedRecord.class, "weightedRecord");
final List<WeightedRecord> list = mongoTemplate.find(mongoQuery, WeightedRecord.class);
Page<WeightedRecord> pageList = new PageImpl(list, pageable, count);
return pageList;
}
}