先来说下我们的工作使用场景,我们的系统中有大量的静态数据并且是查询多更新少,同时需要进行统计分析使用,考虑到此因素而选择使用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方法。