mongo分组查询,统计 Group.grouping(),Group.first(),Accumulator(“$sum“, new Integer(1) 含义解释
生活随笔
收集整理的這篇文章主要介紹了
mongo分组查询,统计 Group.grouping(),Group.first(),Accumulator(“$sum“, new Integer(1) 含义解释
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
同一個接口,兩種方法,結果相同。
1.mongoTemplate
/*** 文章閱讀排行榜** @param platformId* @return*/public Map<String, Integer> getPharamacistArticleStudyRank(String platformId) {Map<String, Integer> dataMap = new HashMap<String, Integer>(16);Integer studyYear = LmsConfig.getRealStudyYear();String pharmacistStudyYearPeriod = LmsConfig.getPharmacistStudyYearPeriod(studyYear);String[] pharmacistStudyYear = pharmacistStudyYearPeriod.split("#");String startDate = pharmacistStudyYear[0];String endDate = pharmacistStudyYear[1];// 查詢條件MatchOperation matchOperation = Aggregation.match(Criteria.where("createTime").gte(DateUtil.getDate(startDate, DateUtil.SECONDFORMAT)).lte(DateUtil.getDate(endDate, DateUtil.SECONDFORMAT)).and("platformId").is(platformId));// 分組條件:按articleId分組,并統計每個分組的數據條數存儲到studyYear中GroupOperation groupOperation = Aggregation.group("articleId").count().as("studyYear");// 查詢Aggregation agg = Aggregation.newAggregation(matchOperation, groupOperation);AggregationResults<PharmacistArticleVo> groupResults = mongoTemplate.aggregate(agg,"PharmacistArticleVo", PharmacistArticleVo.class);List<PharmacistArticleVo> pharmacistUserPointResults = groupResults.getMappedResults();for (PharmacistArticleVo pharmacistArticleVo : pharmacistUserPointResults) {dataMap.put(pharmacistArticleVo.getId(), pharmacistArticleVo.getStudyYear());}return dataMap;} Aggregation agg = Aggregation.newAggregation( Aggregation.match(criteria),//條件 Aggregation.group("a","b","c","d","e").count().as("f"),//分組字段 Aggregation.sort(sort),//排序 Aggregation.skip(page.getFirstResult()),//過濾 Aggregation.limit(pageSize)//頁數 ); AggregationResults<Test> outputType=mongoTemplate.aggregate(agg,"test",Test.class); List<Test> list=outputType.getMappedResults();2.Morphia
/*** 文章閱讀排行榜* @param platformId* @return*/public Map<String, Integer> getPharamacistArticleStudyRank(String platformId) {Map<String, Integer> dataMap = new HashMap<String, Integer>();Datastore datastore = pharmacistArticleDao.getDatastore();Query<PharmacistArticleVo> query = datastore.createQuery(PharmacistArticleVo.class);query.field("platformId").equal(platformId);Integer studyYear = SystemConfig.getRealStudyYear();String pharmacistStudyYearPeriod = SystemConfig.getPharmacistStudyYearPeriod(studyYear);String[] pharmacistStudyYear = pharmacistStudyYearPeriod.split("#");String startDate = pharmacistStudyYear[0];String endDate = pharmacistStudyYear[1];query.filter("createTime >=", DateUtil.getDate(startDate,DateUtil.SECONDFORMAT));query.filter("createTime <=",DateUtil.getDate(endDate,DateUtil.SECONDFORMAT));AggregationOptions build = AggregationOptions.builder().outputMode(AggregationOptions.OutputMode.CURSOR).allowDiskUse(true).build();AggregationPipeline pipeline = datastore.createAggregation(PharmacistArticleVo.class).match(query).group( // 通過articleId進行分類查詢得到分組Group.id(Group.grouping("articleId")), Group.grouping("articleId", Group.first("articleId")), // 統計每個分組的數據條數存儲到studyYear中Group.grouping("studyYear", Group.first("studyYear")), Group.grouping("count", new Accumulator("$sum", new Integer(1)))); // 查詢Iterator<PharmacistUserPointResult> iterator = pipeline.aggregate(PharmacistUserPointResult.class, build);while (iterator.hasNext()) {PharmacistUserPointResult result = iterator.next();if (result.getArticleId() == null) {continue;}dataMap.put(result.getArticleId(), result.getCount());}return dataMap;}結果:
他們結果相同,如下:
?結合查詢條件和分組條件,和計數條件對應數據庫看:
方法含義介紹:
下面兩句代碼實現相同功能:
// 按userId分組,并將它在返回結果中,以id的形式存儲。并統計每個分組的數據條數,存儲到返回結果的userId中。如下圖所示: GroupOperation groupOperation = Aggregation.group("userId").count().as("userId"); // 按userId進行分組,并在返回結果中,把它作為id進行存儲。AggregationPipeline pipeline = datastore.createAggregation(GetPointDayVo.class).match(query).group(Group.id(Group.grouping("userId")), // 統計每個分組中數據個數,并在返回結果中,把它作為count進行存儲。Group.grouping("userId", Group.first("userId")), Group.grouping("count", new Accumulator("$sum", new Integer(1))));總結
以上是生活随笔為你收集整理的mongo分组查询,统计 Group.grouping(),Group.first(),Accumulator(“$sum“, new Integer(1) 含义解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux显示系统信息软件下载,linu
- 下一篇: Qt之QLineEdit详解(附源码)