您好,登录后才能下订单哦!
这篇文章主要介绍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查询分页。
第一步:实现分页工具类
package com.qt.robot.mongoEntity; import java.util.List; /** * 分页 * @author 作者:yaohongan * @create 创建时间:2018年10月9日上午9:53:15 * */ public class Page<T> { // 结果集 private List<T> datas; // 查询记录数 private int rowCount; // 每页多少条数据 private int pageSize = 10; // 第几页 private int pageNo = 1; // 跳过几条数 private int skip = 0; /** * 总页数 * @return */ public int getTotalPages() { return (rowCount + pageSize - 1) / pageSize; } public List<T> getDatas() { return datas; } public void setDatas(List<T> datas) { this.datas = datas; } public int getRowCount() { return rowCount; } public void setRowCount(int rowCount) { this.rowCount = rowCount; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getSkip() { skip = (pageNo - 1) * pageSize; return skip; } public void setSkip(int skip) { this.skip = skip; } public int getPageNo() { return pageNo; } public void setPageNo(int pageNo) { this.pageNo = pageNo; } }
第二步:实现分页
/** * * @author 作者:yaohongan * @create 创建时间:2018年10月9日下午3:17:03 * @desc 分页根据条件查询机器人id */ public Page<VoiceInteractionStatisticsEntity> getVoiceInteractionStatistics(int pageNo, int pageSize, String robotId, String robotTypeId) { Page<VoiceInteractionStatisticsEntity> page = new Page<VoiceInteractionStatisticsEntity>(); page.setPageNo(pageNo); page.setPageSize(pageSize); Query query = new Query(); Criteria criteria = new Criteria(); int count = 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 = new Query(criteria); count = (int) mongoTemplate.count(query, collectionName); page.setRowCount(count); } // 根据robotTypeId(机器人设备id)查询 if (StringUtils.isNoneBlank(robotTypeId)) { criteria = Criteria.where("robotTypeId").is(robotTypeId); query = new Query(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 = new Query(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); return page; }
第三步:应用查询
/** * * @author 作者:yaohongan * @create 创建时间:2018年10月9日上午10:00:50 * @desc 实时统计语音交互明细 */ public List<VoiceInteractionStatistics> detailStatistics(int pageNo, int pageSize, String robotId, String robotTypeId) { List<VoiceInteractionStatistics> detailStatisticsList = new ArrayList<>(); Date date = new Date(); date.setHours(0); date.setMinutes(0); date.setSeconds(0); Date date1 = new Date(); Calendar calc = Calendar.getInstance(); calc.setTime(date); calc.add(calc.DATE, -1); Date minDate = calc.getTime(); Criteria today = null; Criteria yesterday = null; Criteria total = null; Query queryByToday = null; Query queryByYesterday = null; Query queryByTotal = null; // 根据条件查询机器人id Page<VoiceInteractionStatisticsEntity> page = getVoiceInteractionStatistics(pageNo, pageSize, robotId, robotTypeId); if (page != null) { List<VoiceInteractionStatisticsEntity> list = page.getDatas(); for (VoiceInteractionStatisticsEntity voiceInteractionStatisticsEntity : list) { // 查询今日消息数 today = Criteria.where("time").gte(date).lt(date1).and("robotId") .is(voiceInteractionStatisticsEntity.getRobotId()); queryByToday = new Query(today); int todayTotal = (int) mongoTemplate.count(queryByToday, collectionName); // 查询昨日消息数 yesterday = Criteria.where("time").gte(minDate).lt(date).and("robotId") .is(voiceInteractionStatisticsEntity.getRobotId()); queryByYesterday = new Query(yesterday); int yesterdayTotal = (int) mongoTemplate.count(queryByYesterday, collectionName); // 查询访问总量 total = Criteria.where("robotId").is(voiceInteractionStatisticsEntity.getRobotId()); queryByTotal = new Query(total); int totals = (int) mongoTemplate.count(queryByTotal, collectionName); String robotId1 = voiceInteractionStatisticsEntity.getRobotId(); String robotTypeId1 = voiceInteractionStatisticsEntity.getRobotTypeId(); String robotTypeName = voiceInteractionStatisticsEntity.getRobotTypeName(); VoiceInteractionStatistics voiceInteractionStatistics = new VoiceInteractionStatistics (robotId1, robotTypeId1, robotTypeName, todayTotal, yesterdayTotal, totals); detailStatisticsList.add(voiceInteractionStatistics); } } return detailStatisticsList; }
以上是mongodb写分页查询语句的方法的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。