Spring Data MongoDB七:进阶Aggregation操作(下)

时间:2022-10-01 00:51:09

一、Spring Data MongoDB   Aggregation 简介                                                    

     上一篇已经Aggregation 做了很详细的介绍,这边就不在介绍,spring Data  MongoDB 项目提供与mongodb文档数据库的集成,Spring Data MongoDB 提供org.springframework.data.mongodb.core.MongoTemplate是对Connection进行封装,提供了连接管理,Spring Data MongoDB hibernate等一样提供了模板,mongoTemplate提供调用Aggregation 方法。


二、Spring Data MongoDB Aggregation 方法                                                                                                                                                         

          mongoTemplate提供调用4个Aggregation 方法

           Spring Data MongoDB七:进阶Aggregation操作(下)

    

 【AggregationOperation】

                     

                MongoDB Aggregation 提供了Aggregation Operations ,Spring Data MongoDB 也提供这些方法,方便的操作


               Pipeline Aggregation Operators                  project, skip, limit, unwind, group, sort, geoNear

               Group Aggregation Operators                    addToSet, first, last, max, min, avg, push, sum, (*count)

               Arithmetic Aggregation Operators               add (*via plus), subtract (*via minus), multiply, divide, mod

               Comparison Aggregation Operators          eq (*via: is), gt, gte, lt, lte, ne

              

               Group Aggregation查看源代码:


               GroupOperation  implements FieldsExposingAggregationOperation    ,  FieldsExposingAggregationOperation extends AggregationOperation

              GroupOperation  提供了 addToSet, first, last, max, min, avg, push, sum等方法

                 Spring Data MongoDB七:进阶Aggregation操作(下)



   【TypedAggregation】

                 TypedAggregation<I> extends Aggregation   提供了Class<I> inputType  一个输入类型,也就是对哪个集合进行操作,我们可以查看源代码

            Spring Data MongoDB七:进阶Aggregation操作(下)

 【outputType】

                     输出类型,可以指定具体的实体类型,官方的例子:

                      更多的例子可以查看官方网文档 Spring Data MongoDB 文档

           Spring Data MongoDB七:进阶Aggregation操作(下)

 

                 

                outputType我们项目中运用比较多的是BasicDBObject.class,操作也比较方便,不用特意定义一个实体类,可以把Aggregation封装一个通用的方法。

三、Spring Data MongoDB Aggregation 例子                                                                                                                                                         

               我们需要查询订单号为001,002,003中的订单详情各个产品卖出多少个,并且过滤掉数量小于1的产品

 Aggregation 实现类】

                        

[java] view plain copy
  1. @Override  
  2.     public void getAggregation() {  
  3.         Set<String> onumberSet=new HashSet<String>();  
  4.         onumberSet.add("001");  
  5.         onumberSet.add("002");  
  6.         onumberSet.add("003");  
  7.         Aggregation agg = Aggregation.newAggregation(  
  8.                 Aggregation.match(Criteria.where("onumber").in(onumberSet)),  
  9.                 Aggregation.unwind("items"),  
  10.                 Aggregation.group("items.ino").sum("items.quantity").as("total"),  
  11.                 Aggregation.match(Criteria.where("total").gt(1))  
  12.         );  
  13.           
  14.         AggregationResults<BasicDBObject> outputType=mongoTemplate.aggregate(agg,"orders", BasicDBObject.class);  
  15.         for (Iterator<BasicDBObject> iterator = outputType.iterator(); iterator.hasNext();) {  
  16.             DBObject obj =iterator.next();  
  17.             System.out.println(obj.toString());  
  18.     }  
  19.           
  

测试类】

[java] view plain copy
  1. public class TestOrders {  
  2.      private static OrdersDao ordersDaoImpl;    
  3.         private static  ClassPathXmlApplicationContext  app;    
  4.         @BeforeClass      
  5.         public static void initSpring() {     
  6.             try {           
  7.              app = new ClassPathXmlApplicationContext("classpath:applicationContext-mongo.xml");      
  8.              ordersDaoImpl = (OrdersDao) app.getBean("ordersDaoImpl");     
  9.             } catch (Exception e) {    
  10.                 e.printStackTrace();    
  11.             }    
  12.                }     
  13.             
  14.             @Test     
  15.             public void testAggregation()    
  16.             {    
  17.                 ordersDaoImpl.getAggregation();  
  18.                   
  19.             }    
  20. }  


【测试结果】

           Spring Data MongoDB七:进阶Aggregation操作(下)


原文地址:http://blog.csdn.net/congcong68/article/category/5681741