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

一、Spring Data MongoDB   Aggregation 简介                                                       

     上一篇已经Aggregation 做了很详细的介绍,这边就不在介绍,Spring Data  MongoDB 项目提供与MongoDB文档数据库的集成,Spring Data MongoDB 提供org.springframework.data.mongodb.core.MongoTemplate是对Connection进行封装,提供了连接管理,Spring Data MongoDBhibernate等一样提供了模板,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 实现类】                  

[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. }  
【测试结果】

           

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值