關於mongoDB使用java實現高級查詢query參數的組裝


   需要引入的兩個包: 

import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;

常用的查詢條件關鍵字:
模糊查詢:regex or:orOperator
gt:大於
lt:小於
gte:大於或等於
lte:小於或等於
Sort:排序
ne:不等於
/**
*封裝查詢mongodb所需要的query
*@param queryVO 查詢需要的參數
*/
public Query get(QueryVO queryVO){
//新建一個query對象
Query query = new Query();
//條件 滿足orgId = queryVO.getOrgId();
query.addCriteria(Criteria.where("orgId").is(queryVO.getOrgId()));
//條件 同時logType = queryVO.getLogType()
query.addCriteria(Criteria.where("logType").is(queryVO.getLogType()));
//對時間進行范圍查詢 需要新建Criteria對象
Criteria criteriaDay = null;
//開始時間如果存在 則 loginTime >= 開始時間
if(!StringUtils.isEmpty(queryVO.getStartTime())) {
criteriaDay = Criteria.where("loginTime").gte(queryVO.getStartTime());
}
//結束時間如果存在
if(!StringUtils.isEmpty(queryVO.getEndTime())) {
//開始時間不存在 則 loginTime<= 結束時間
if(criteriaDay == null){
  criteriaDay = Criteria.where("loginTime").lte(queryVO.getEndTime());
}else{
  //開始結束時間均存在 再加上loginyTime <= 結束時間
criteriaDay.lte(queryVO.getEndTime());
}
}
if(criteriaDay != null){
  //再給query對象添加該criteriaDay對象
query.addCriteria(criteriaDay);
}
//根據多個字段來進行關鍵字查詢 ,orOperator()相當於 mysql 中 or , regex相當於MySQL中模糊查詢關鍵字 like
if(!StringUtils.isEmpty(queryVO.getKeyWord())) {
query.addCriteria(new Criteria ().orOperator(
Criteria.where("userCode").regex(queryVO.getKeyWord())
,Criteria.where("userName").regex(queryVO.getKeyWord())
,Criteria.where("account").regex(queryVO.getKeyWord())));
}
//根據loginTime來進行倒序排列
query.with(new Sort(Sort.Direction.DESC, "loginTime"));
return query;
}

聚合查詢:
//根據orgId,bannerId分組查出各自的總數 別稱為 userCount

Criteria criteria1 = Criteria.where("orgId").is(orgId);
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(criteria1),
Aggregation.group("orgId","bannerId").count().as("userCount"));

AggregationResults<DBObject> aggregationResults = statisticsTemplate.aggregate(aggregation, BannerV2Read.class, DBObject.class);

List<DBObject> mappedResults = aggregationResults.getMappedResults();
for (DBObject dbObject : mappedResults) {
String bannerId = (String) dbObject.get("bannerId");
Integer userCount = (Integer) dbObject.get("userCount");
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM