MongoDB mongotemplate多條件符合查詢
阿新 • • 發佈:2019-01-11
一、一個 Criteria將所有條件整合,注意(對同一個屬性加兩次限制需使用andOperator,並且只能使用一次)
分、 排序、按時間查詢 Query query = new Query(); //必須條件 Criteria c = Criteria.where("VINID").is(Map.get(vin)); //範圍條件 if(!StringUtils.isEmpty(start)&&StringUtils.isEmpty(end)){ c.and("TIME1").gte(GetTime1(start)); }else if(StringUtils.isEmpty(start)&&!StringUtils.isEmpty(end)){ c.and("TIME1").lte(GetTime1(end)); }else if(!StringUtils.isEmpty(start)&&!StringUtils.isEmpty(end)){ //對同一個屬性加兩次限制需這樣操作 c.andOperator( c.where("TIME1").gte(GetTime1(start)), c.where("TIME1").lte(GetTime1(end)) ); } query.addCriteria(c); //總數 num = (int) mongoTemplate.count(query,CarDataEx.class,"jmevTest"); System.out.println("總數:"+num); ht.put("total", num); //分頁 query.skip((page-1)*rows).limit(rows); //排序 query.with(new Sort(Sort.Direction.DESC,"TIME1")); //query.with(new Sort(properties)); rst = mongoTemplate.find(query,CarDataEx.class,"jmevTest");
二、使用query.addCriteria()新增多個Criteria條件,query的條件,可以多次查詢使用,先使用條件查詢總數量,然後根據該條件查詢記錄分頁
Query query = new Query(); if(null!=message){ if(StringUtils.isNotBlank(message.getDeviceAddr())){ //criteria.andOperator(Criteria.where("deviceAddr").is(message.getDeviceAddr())); query.addCriteria(Criteria.where("deviceAddr").is(message.getDeviceAddr())); } if(StringUtils.isNotBlank(message.getFunctionCode())){ //criteria.andOperator(Criteria.where("functionCode").is(message.getFunctionCode())); query.addCriteria(Criteria.where("functionCode").is(message.getFunctionCode())); } if(StringUtils.isNotBlank(message.getStartTime())&&StringUtils.isBlank(message.getEndTime())){ //criteria.andOperator(Criteria.where("messageTime").gte(DateUtil.StringToDate(message.getStartTime()))); query.addCriteria(Criteria.where("messageTime").gte(DateUtil.StringToDate(message.getStartTime()))); } if(StringUtils.isNotBlank(message.getEndTime())&&StringUtils.isBlank(message.getStartTime())){ //criteria.andOperator(Criteria.where("messageTime").lte(DateUtil.StringToDate(message.getEndTime()))); query.addCriteria(Criteria.where("messageTime").lte(DateUtil.StringToDate(message.getEndTime()))); } if(StringUtils.isNotBlank(message.getStartTime())&&StringUtils.isNotBlank(message.getEndTime())){ /*criteria.andOperator(Criteria.where("messageTime").gte(DateUtil.StringToDate(message.getStartTime())) .lte(DateUtil.StringToDate(message.getEndTime()))); */ query.addCriteria(Criteria.where("messageTime").gte(DateUtil.StringToDate(message.getStartTime())) .lte(DateUtil.StringToDate(message.getEndTime()))); } } int count = (int) mongoTemplate.count(query,BaseMessage.class,"message"); pageResult.initPageInfo(message.getPageSize(),message.getPageNumber(),count); query.with(new Sort(Sort.Direction.DESC, "messageTime")); //分頁 query.skip(pageResult.getBeginRowNumber()).limit(pageResult.getPageSize()); List<BaseMessageDto> msgList = mongoTemplate.find(query, BaseMessageDto.class,"message");
注意:query.andOperator();只能使用一次,不可以同時使用多個andOperator,但可以一個andOperator,新增多個Criteria條件:query.andOperator(Criteria1,Criteria2,Criteria3);