mongodb写分页查询语句的方法
这篇文章主要介绍mongodb写分页查询语句的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
一、简介
SpringData MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的find的操作,分页查询是返回到匹配文档的游标,可以随意修改查询限制、跳跃、和排序顺序的功能。
我们在查询时find()方法接受Query类型有:
(1)org.springframework.data.mongodb.core.query
(2)org.springframework.data.mongodb.core.query.BasicQuery
Query类提供方法有limit、skip、sort查询限制、跳跃、和排序顺序的功能,BasicQuery继承了Query类。
二、基本分页
Query类提供方法有limit、skip、sort查询限制、跳跃、和排序顺序的功能,我们实现Query查询分页。
第一步:实现分页工具类
packagecom.qt.robot.mongoEntity;importjava.util.List;/***分页*@author作者:yaohongan*@create创建时间:2018年10月9日上午9:53:15**/publicclassPage<T>{//结果集privateList<T>datas;//查询记录数privateintrowCount;//每页多少条数据privateintpageSize=10;//第几页privateintpageNo=1;//跳过几条数privateintskip=0;/***总页数*@return*/publicintgetTotalPages(){return(rowCount+pageSize-1)/pageSize;}publicList<T>getDatas(){returndatas;}publicvoidsetDatas(List<T>datas){this.datas=datas;}publicintgetRowCount(){returnrowCount;}publicvoidsetRowCount(introwCount){this.rowCount=rowCount;}publicintgetPageSize(){returnpageSize;}publicvoidsetPageSize(intpageSize){this.pageSize=pageSize;}publicintgetSkip(){skip=(pageNo-1)*pageSize;returnskip;}publicvoidsetSkip(intskip){this.skip=skip;}publicintgetPageNo(){returnpageNo;}publicvoidsetPageNo(intpageNo){this.pageNo=pageNo;}}
第二步:实现分页
/****@author作者:yaohongan*@create创建时间:2018年10月9日下午3:17:03*@desc分页根据条件查询机器人id*/publicPage<VoiceInteractionStatisticsEntity>getVoiceInteractionStatistics(intpageNo,intpageSize,StringrobotId,StringrobotTypeId){Page<VoiceInteractionStatisticsEntity>page=newPage<VoiceInteractionStatisticsEntity>();page.setPageNo(pageNo);page.setPageSize(pageSize);Queryquery=newQuery();Criteriacriteria=newCriteria();intcount=0;//查询总数//只分页查询if(StringUtils.isBlank(robotId)&&StringUtils.isBlank(robotTypeId)){count=(int)mongoTemplate.count(query,collectionName);page.setRowCount(count);}//根据robotId(机器人id)查询if(StringUtils.isNoneBlank(robotId)){criteria=Criteria.where("robotId").is(robotId);query=newQuery(criteria);count=(int)mongoTemplate.count(query,collectionName);page.setRowCount(count);}//根据robotTypeId(机器人设备id)查询if(StringUtils.isNoneBlank(robotTypeId)){criteria=Criteria.where("robotTypeId").is(robotTypeId);query=newQuery(criteria);count=(int)mongoTemplate.count(query,collectionName);page.setRowCount(count);}//根据robotId、robotTypeId查询if(StringUtils.isNoneBlank(robotId)&&StringUtils.isNoneBlank(robotTypeId)){criteria=Criteria.where("robotTypeId").is(robotTypeId).and("robotId").is(robotId);query=newQuery(criteria);count=(int)mongoTemplate.count(query,collectionName);page.setRowCount(count);}query.skip(page.getSkip()).limit(page.getPageSize());List<VoiceInteractionStatisticsEntity>datas=mongoTemplate.find(query,VoiceInteractionStatisticsEntity.class,collectionName);page.setDatas(datas);returnpage;}
第三步:应用查询
/****@author作者:yaohongan*@create创建时间:2018年10月9日上午10:00:50*@desc实时统计语音交互明细*/publicList<VoiceInteractionStatistics>detailStatistics(intpageNo,intpageSize,StringrobotId,StringrobotTypeId){List<VoiceInteractionStatistics>detailStatisticsList=newArrayList<>();Datedate=newDate();date.setHours(0);date.setMinutes(0);date.setSeconds(0);Datedate1=newDate();Calendarcalc=Calendar.getInstance();calc.setTime(date);calc.add(calc.DATE,-1);DateminDate=calc.getTime();Criteriatoday=null;Criteriayesterday=null;Criteriatotal=null;QueryqueryByToday=null;QueryqueryByYesterday=null;QueryqueryByTotal=null;//根据条件查询机器人idPage<VoiceInteractionStatisticsEntity>page=getVoiceInteractionStatistics(pageNo,pageSize,robotId,robotTypeId);if(page!=null){List<VoiceInteractionStatisticsEntity>list=page.getDatas();for(VoiceInteractionStatisticsEntityvoiceInteractionStatisticsEntity:list){//查询今日消息数today=Criteria.where("time").gte(date).lt(date1).and("robotId").is(voiceInteractionStatisticsEntity.getRobotId());queryByToday=newQuery(today);inttodayTotal=(int)mongoTemplate.count(queryByToday,collectionName);//查询昨日消息数yesterday=Criteria.where("time").gte(minDate).lt(date).and("robotId").is(voiceInteractionStatisticsEntity.getRobotId());queryByYesterday=newQuery(yesterday);intyesterdayTotal=(int)mongoTemplate.count(queryByYesterday,collectionName);//查询访问总量total=Criteria.where("robotId").is(voiceInteractionStatisticsEntity.getRobotId());queryByTotal=newQuery(total);inttotals=(int)mongoTemplate.count(queryByTotal,collectionName);StringrobotId1=voiceInteractionStatisticsEntity.getRobotId();StringrobotTypeId1=voiceInteractionStatisticsEntity.getRobotTypeId();StringrobotTypeName=voiceInteractionStatisticsEntity.getRobotTypeName();VoiceInteractionStatisticsvoiceInteractionStatistics=newVoiceInteractionStatistics(robotId1,robotTypeId1,robotTypeName,todayTotal,yesterdayTotal,totals);detailStatisticsList.add(voiceInteractionStatistics);}}returndetailStatisticsList;}
以上是mongodb写分页查询语句的方法的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。