ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

mongo根据某个字段统计另外两个字段总和及java实现——agregate group sum add

2020-09-20 10:02:33  阅读:339  来源: 互联网

标签:operations group mongo agregate sum Aggregation add match


1.需求,表A中按一定条件,根据a字段统计b、c两字段的总和——sql语句实现,实测好使

db.getCollection("A").aggregate([
    { 
      "$match":{ "d":0}
    },{
      "$group":{
        "_id":"$a",
        "total":{
          $sum:{$add:["$b","$b"]}
          }
        }
    }
])

另外,如果不是根据某个字段统计,而是要分组统计所有数据,那么group里的"_id"对应的值改成null或者常量即可

2.java代码实现,使用springboot的mongoTemplate里的aggregate方法,这次主要说一下用java代码如何实现sum中套add的方法,需要借助ArithmeticOperators中的静态内部类Add,上代码

List<AggregationOperation> operations = new ArrayList<>();
        operations.add(Aggregation.match(criteria));//匹配条件
        operations.add(Aggregation.group("a").sum(//group里不加任何东西,表示整个表分组统计
                        ArithmeticOperators.Add.valueOf("b").add("c"))//这个表示两个字段先add,在sum,特别牛
                .as("total"));
        Aggregation aggregation = Aggregation.newAggregation(operations);
        AggregationResults<BasicDBObject> aggregateResult = mongoTemplate.aggregate(aggregation,A, BasicDBObject.class);
        List<BasicDBObject> results = aggregateResult.getMappedResults();

查看输入日志:

[{ "$match" : {}}}}, { "$group" : { "_id" : "$a","totalUnDone" : { "$sum" : { "$add" : ["$b", "$c"]}}}}] in collection A

总结:mongoTemplate里有很多可以挖掘的东西,这个ArithmeticOperators的内部变量也是翻源码找的, 需要同志们一起努力,加油!!!

如果帮到了您,需要大家写个好评

 

标签:operations,group,mongo,agregate,sum,Aggregation,add,match
来源: https://www.cnblogs.com/yayin/p/13698851.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有