mongoTemplate的使用

本文介绍了如何使用SpringDataMongoDB进行分页动态查询,包括设置默认分页参数、根据输入条件精确和模糊查询、以及处理时间范围。方法中利用了`MongoTemplate`和`Pageable`类进行高效数据检索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 分页动态查询

@Autowired
private MongoTemplate mongoTemplate;

@Override
public Page<WeightedRecord> list(WeightedRecordDto wr) {
        //分页参数,默认第一页,显示10条
        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()));
            }

            // 查询时间范围
//            Criteria criteria = new Criteria();
//            criteria.and("date_time").gte("2022-01-01 00:00:00").lte("2022-12-31 23:59:59");
//            mongoQuery.addCriteria(criteria);

            // 分页参数
            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;

        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值