1. 程式人生 > 其它 >mongoTemplate聚合統計欄位型別為字串的資料,根據時間日期月份進行統計,日期也為字串

mongoTemplate聚合統計欄位型別為字串的資料,根據時間日期月份進行統計,日期也為字串

mongoTemplate聚合統計欄位型別為字串的資料,需要對字串型別進行轉換後在做統計否則統計結果為0,根據時間日期月份進行統計,日期也為字串,對日期進行處理,進行聚合統計
 1 @RestController
 2 @RequestMapping("test")
 3 public class MongoStringSum {
 4     @Autowired
 5     private MongoTemplate mongoTemplate;
 6     /**
 7      * @Author: lpj
 8      * @Date: 2021/8/28 20:37
 9      *  mongoDB統計字串型別的資料和,以月份進行分組統計,且時間為字串型別
10      */
11     @GetMapping
12     public List<JSONObject> test() {
13 Criteria criteria = new Criteria(); 14 String tableName="你要統計的表名"; 15 String name = "name";//名稱列明 16 String date = "date";//日期列明 17 String score = "score";//分值列明 18 //其中日期的資料格式為字串型別"2021-08-27 11:11:11" 19 //要統計的分值列資料為字串型別"99.9","99.8" 20 Aggregation banciAggregation = Aggregation.newAggregation(
21 match(Criteria.where(name).is("張三")),//統計名稱為**的資料 22 //根據日期進行統計,日期為字串資料,需特殊處理,這裡是根據月份進行分組統計,擷取日期字串0-7則就為月份 23 Aggregation.project(date).andExpression(date).substring(0, 7).as("times") 24 //因為Mongo不能直接統計字串求和操作,則對該欄位的資料進行型別轉換,轉換為doubbo進行統計
25 .and(ConvertOperators.Convert.convertValueOf(score).to("double").onErrorReturn(0).onNullReturn(0)).as("class"), 26 //根據處理後的時間進行分組,對處理後的要統計的欄位資料進行求和 27 Aggregation.group("times").sum("class").as("countSum")); 28 29 AggregationResults<JSONObject> banciAggregate = mongoTemplate.aggregate(banciAggregation, tableName, JSONObject.class); 30 List<JSONObject> results = banciAggregate.getMappedResults();//統計完成的資料就在該集合中,我們取出即可使用 31 return results; 32 } 33 34 }