問題:
在使用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");
總結:
還是要看官方的文檔和源代碼