标签:operations MongoDB Aggregation 日常 Criteria query 操作 where createTime
最近项目中使用MongoDB进行存入统计相关的数据,便于查寻且提高效率。
首先在项目中引入MongoDB:
1.加入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
2.配置application.yml
spring: data: mongodb: host: ${MONGO_HOST:localhost} port: 27017 database: student_statistics # username: # password:
操作MongoDB
1.注入 MongoTemplate 类直接对MongoDB进行操作
@Autowired private MongoTemplate mongoTemplate;
2.1聚合查寻
//封装查询条件 List<AggregationOperation> operations = new ArrayList<>(); if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { operations.add(Aggregation.match(Criteria.where("createTime").in(timeList))); } if (CollectionUtils.isNotEmpty(schoolIds)) { operations.add(Aggregation.match(Criteria.where("schoolId").in(schoolIds))); } // 聚合分组 operations.add(Aggregation.group("createTime") .count().as("totalNum") .sum("signNum").as("totalSignNum") ); // 列举要查寻的数据,并对聚合字段做别名(project后面的参数即为要查寻和显示的字段),否则聚合字段恒为_id operations.add(Aggregation.project("createTime","maybeContinueNum","alreadyContinueNum").and("createTime").previousOperation()); Aggregation aggregation = Aggregation.newAggregation(operations); AggregationResults<GeekDataContinueRateRangeOut> results = mongoTemplate.aggregate(aggregation, collection, Out.class);
List<GeekDataContinueRateRangeOut> queryResultList = results.getMappedResults();
2.2 普通查询并排序
//封装查询条件 Query query = new Query(); if (CollectionUtils.isNotEmpty(schoolIds)) { query.addCriteria(Criteria.where(StatisticsConst.QUERY_CONDITION_SCHOOLAREAID).in(schoolIds)); } if (StringUtils.isNotBlank(createTime)) { query.addCriteria(Criteria.where(StatisticsConst.QUERY_CONDITION_CREATETIME).is(createTime)); } long count = mongoTemplate.count(query, collectionName); Criteria criteria = new Criteria(); criteria.orOperator(Criteria.where(StatisticsConst.QUERY_CONDITION_REFUND_NUM).is(1), Criteria.where(StatisticsConst.QUERY_CONDITION_PRE_REFUND_NUM).is(1), Criteria.where(StatisticsConst.QUERY_CONDITION_CARRYOVER_REFUND_NUM).is(1)); query.addCriteria(criteria); query.with(Sort.by(Sort.Direction.DESC,StatisticsConst.QUERY_CONDITION_OUT_CLASS_DATE)); // 查寻 List<RefundOut> refundOuts = mongoTemplate.find(query, RefundOut.class, collectionName);
3.打印sql,在application.yml中配置log级别,即可在控制台打印执行的sql,但不能直接在Navicat执行,需要简单处理下格式。
logging: level: org.springframework.data.mongodb.core.MongoTemplate: DEBUG
标签:operations,MongoDB,Aggregation,日常,Criteria,query,操作,where,createTime 来源: https://www.cnblogs.com/qukun/p/12532221.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。