最近在项目中遇到了Mongodb在聚合查询上的应用,在这里做一个记录。
Spring Data MongoDB 中的聚合框架支持基于以下关键抽象:
Aggregation
、AggregationDefinition
和AggregationResults。项目中目前用到的是Aggregation。需要进一步了解的可以看文末相关链接资料。
直接上代码解释:
//目的:查询出每个班里有多少姓张的男生,并用班级代号分组输出
//.group("class").count().as("count")就是以班级分组,计算数量,数量命名为“count”
//project中表示需要输出的字段,.and.as就是“classId”这个字段也要输出,字段名为“cId”,.and("cId").previousOperation就是以“cId”作为分组的“_id”输出)
Criteria criteria = Criteria.where("surname").is("张").and("sex").is("M");
Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteria),
Aggregation.group("class").count().as("count"),
Aggregation.project("count","class").and("classId").as("cId").and("cId").previousOperation();
List<BasicDBObject> result = mongoTemplate.aggregate(aggregation,"t_class" BasicDBObject.class).getMappedResults();
关于聚合的相关文档整理在下面:
(1)聚合查询(aggregation) 之 project:Spring data mongodb 聚合查询(aggregation) 之 project - JavaShuoproject :控制返回的字段,例如一个实体类,咱们只须要部分字段java 1 插入数据app mongoTemplate.save(new Role(http://www.javashuo.com/article/p-htmtkzmy-mc.html
(3)Mongodb官方文档Spring Data MongoDB - Reference Documentationhttps://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.aggregation (3)关于Spring-Data-Mongodb中的project()的用法,和previousOperation()的用法_冲吧,不要停!-CSDN博客_java mongodb project关于project()方法的使用1,project("name", "netPrice") project方法的内容是你要映射的字段,相当于{$project: {sumfavour: 1, userid: 1}}2,project().and("foo").as("bar") 如果你想要把一个字段映射成别一个名字的话,就可以用上面的方法,相当于{$project: {https://blog.csdn.net/hotdust/article/details/52605990
(4)MongoDB mongoTemplate查询条作组合例子https://www.iteye.com/blog/huangyongxing310-2342307https://www.iteye.com/blog/huangyongxing310-2342307 欢迎讨论~