mongo根據某個字段統計另外兩個字段總和及java實現——agregate group sum add


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的內部變量也是翻源碼找的, 需要同志們一起努力,加油!!!

如果幫到了您,需要大家寫個好評

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM