先来说下我们的工作使用场景,我们的系统中有大量的静态数据并且是查询多更新少,同时需要进行统计分析使用,考虑到此因素而选择使用mongo作为nosql数据库。
springboot版本:2.4
mongoDb版本:5.0.9
开发工具:idea
**step1😗*pom包中需要引入的依赖:

   **<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>**

step2: 修改application.yml配置文件:

**data:
mongodb:
  host: 127.0.0.1
  port: 27017
  database: test**

Mongo中通过命令创建表语句:
db.createCollection(user); //创建collection

step3: 编写service 实现 查询与统计:
在这里,我使用mongoTemplate服务实现查询统计功能,也可以通过实现MongoRepository的方式实现。
查询所有的数据:

@Override
public List<ZcInfor01> getZcInforList() {
    return mongoTemplate.findAll(ZcInfor01.class);
}

根据条件查询:

  @Override
public ZcInfor01 getEntityByQuery(ZcInfor01 query){
    Query queryEntity = new Query(Criteria.where("zc2003003").is(query.getZc2003001()));

    ZcInfor01 zcInfor01 = mongoTemplate.findOne(queryEntity, ZcInfor01.class);

    return zcInfor01;
}

通过聚合分组统计:

   @Override
    public List<Map> getAggreation(){
        //从mongodb里获取满足条件的记录
       // Criteria criteria = Criteria.where("zc2003003").is("ABC");
        //聚合函数查询统计信息
        Aggregation aggregation = Aggregation.newAggregation(
                //按分类名称 统计 销售数量
                Aggregation.group("zc2003004").first("zc2003004").as("zc2003004").count().as("allCount").sum("zc2003008").as("sum"),
                Aggregation.project("zc2003004","allCount","sum"),
                //按照total降序
                Aggregation.sort(Sort.Direction.DESC,"sum")
        );
        AggregationResults<Map> aggregationResults = mongoTemplate.aggregate(aggregation,ZcInfor01.class,Map.class);
        List<Map> list = aggregationResults.getMappedResults();


        return list;
    }

说明: group后参数是要分组的字段,first表示分组后要展示的字段,使用count进行统计数量。
编写controller方法:

@RequestMapping(
        value = {"/queryMap"},
        method = {RequestMethod.POST}
)
@ResponseBody
public Wrapper queryMap(ZcInfor01 query) {
    List list = null;
    try {
        list = zcInforService.getAggreation();
    } catch (Exception var4) {
        log.error("查询列表异常: " + var4, var4.fillInStackTrace());
        return Wrapper.error();
    }
    return Wrapper.success(list);
}

掉用接口测试结果:

{
    "code": 200,
    "message": "操作成功",
    "data": [
        {
            "_id": "CCC",
            "zc2003004": "CCC",
            "allCount": 1,
            "sum": 3.0
        },
        {
            "_id": "3333333",
            "zc2003004": "3333333",
            "allCount": 1,
            "sum": 0
        },
        {
            "_id": "12121212",
            "zc2003004": "12121212",
            "allCount": 2,
            "sum": 0
        }
    ]
}

至此,springboot集成mongo查询使用完成,可通过

https://www.mongodb.com/docs/mongodb-shell/run-agg-pipelines/

了解mongo的CRUD方法。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐