這篇文章主要介紹MongoDB寫分頁查詢語句的方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)建站主營石城網站建設的網絡公司,主營網站建設方案,重慶APP軟件開發(fā),石城h5小程序設計搭建,石城網站營銷推廣歡迎石城等地區(qū)企業(yè)咨詢
一、簡介
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類提供方法有l(wèi)imit、skip、sort查詢限制、跳躍、和排序順序的功能,BasicQuery繼承了Query類。
二、基本分頁
Query類提供方法有l(wèi)imit、skip、sort查詢限制、跳躍、和排序順序的功能,我們實現(xiàn)Query查詢分頁。
第一步:實現(xiàn)分頁工具類
package com.qt.robot.mongoEntity; import java.util.List; /** * 分頁 * @author 作者:yaohongan * @create 創(chuàng)建時間:2018年10月9日上午9:53:15 * */ public class Page{ // 結果集 private List datas; // 查詢記錄數(shù) private int rowCount; // 每頁多少條數(shù)據 private int pageSize = 10; // 第幾頁 private int pageNo = 1; // 跳過幾條數(shù) private int skip = 0; /** * 總頁數(shù) * @return */ public int getTotalPages() { return (rowCount + pageSize - 1) / pageSize; } public List getDatas() { return datas; } public void setDatas(List 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; } }
第二步:實現(xiàn)分頁
/** * * @author 作者:yaohongan * @create 創(chuàng)建時間:2018年10月9日下午3:17:03 * @desc 分頁根據條件查詢機器人id */ public PagegetVoiceInteractionStatistics(int pageNo, int pageSize, String robotId, String robotTypeId) { Page page = new Page (); page.setPageNo(pageNo); page.setPageSize(pageSize); Query query = new Query(); Criteria criteria = new Criteria(); int count = 0; // 查詢總數(shù) // 只分頁查詢 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 datas = mongoTemplate.find(query, VoiceInteractionStatisticsEntity.class, collectionName); page.setDatas(datas); return page; }
第三步:應用查詢
/** * * @author 作者:yaohongan * @create 創(chuàng)建時間:2018年10月9日上午10:00:50 * @desc 實時統(tǒng)計語音交互明細 */ public ListdetailStatistics(int pageNo, int pageSize, String robotId, String robotTypeId) { List 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 page = getVoiceInteractionStatistics(pageNo, pageSize, robotId, robotTypeId); if (page != null) { List list = page.getDatas(); for (VoiceInteractionStatisticsEntity voiceInteractionStatisticsEntity : list) { // 查詢今日消息數(shù) today = Criteria.where("time").gte(date).lt(date1).and("robotId") .is(voiceInteractionStatisticsEntity.getRobotId()); queryByToday = new Query(today); int todayTotal = (int) mongoTemplate.count(queryByToday, collectionName); // 查詢昨日消息數(shù) 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寫分頁查詢語句的方法的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!