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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/congcong68/article/details/52821362


  一、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 方法

           

    

 【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等方法

                 



   【TypedAggregation】

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

            

 【outputType】

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

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

           

 

                 

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

三、Spring Data MongoDB Aggregation 例子                                                                                                                                                         

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

 Aggregation 实现类】

                        

@Override
	public void getAggregation() {
		Set<String> onumberSet=new HashSet<String>();
		onumberSet.add("001");
		onumberSet.add("002");
		onumberSet.add("003");
		Aggregation agg = Aggregation.newAggregation(
				Aggregation.match(Criteria.where("onumber").in(onumberSet)),
				Aggregation.unwind("items"),
				Aggregation.group("items.ino").sum("items.quantity").as("total"),
				Aggregation.match(Criteria.where("total").gt(1))
		);
		
		AggregationResults<BasicDBObject> outputType=mongoTemplate.aggregate(agg,"orders", BasicDBObject.class);
		for (Iterator<BasicDBObject> iterator = outputType.iterator(); iterator.hasNext();) {
			DBObject obj =iterator.next();
			System.out.println(obj.toString());
	}
		
  

【测试类】

public class TestOrders {
	 private static OrdersDao ordersDaoImpl;  
	    private static  ClassPathXmlApplicationContext  app;  
	    @BeforeClass    
	    public static void initSpring() {   
	        try {         
	         app = new ClassPathXmlApplicationContext("classpath:applicationContext-mongo.xml");    
	         ordersDaoImpl = (OrdersDao) app.getBean("ordersDaoImpl");   
	        } catch (Exception e) {  
	            e.printStackTrace();  
	        }  
	           }   
	      
	        @Test   
	        public void testAggregation()  
	        {  
	        	ordersDaoImpl.getAggregation();
	            
	        }  
}


【测试结果】

           

展开阅读全文

没有更多推荐了,返回首页