ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MongoDB日常操作

2020-03-20 16:05:06  阅读:322  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有