MongoDBTemplate多条件查询的问题

本文解析了在使用SpringData MongoDB进行条件查询时遇到的问题,即条件判断失效导致返回所有数据的原因,并给出了正确的Criteria使用方法。

问题:

在使用Spring Data MongoDB 进行条件查询数据时,发现条件判断不起作用,结果会返回所有的数据。

Criteria criteria = new Criteria();
            criteria.where("shopId")
                    .is(request.getShopId())
                    .and("tradeDate").gte(request.getBeginTradeDate())
                    .lte(request.getEndTradeDate());
            List<ReportInfo> reportInfoList = reportMongoTemplate.
                    find(new Query(criteria), ReportInfo.class,"rept_wallet_refundAndPay");

原因:

经过查看文档和源代码才发现,Criteria的where方法是一个静态工厂方法,它会返回一个实例化的criteria对象,所以就不需要自己new 一个criteria对象了。否则 find(new Query(criteria)里的criteria没有任何判断条件,因此会返回所有的数据。

MongoTemplate 源码

    public static Criteria where(String key) {
        return new Criteria(key);
    }

修改

Criteria criteria = Criteria.where("shopId")
                    .is(request.getShopId())
                    .and("tradeDate").gte(request.getBeginTradeDate())
                    .lte(request.getEndTradeDate());
            List<ReportInfo> reportInfoList = reportMongoTemplate.
                    find(new Query(criteria), ReportInfo.class,"rept_wallet_refundAndPay");
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值