mongoTemplate聚合统计字段类型为字符串的数据的和,根据时
间⽇期⽉份进⾏统计,⽇。。。
需要进⾏统计的数据字段:
统计代码:
package com.ller;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.db.core.MongoTemplate;
import org.db.core.aggregation.Aggregation;
import org.db.core.aggregation.AggregationResults;
import org.db.core.aggregation.ConvertOperators;
import org.db.core.query.Criteria;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
import java.util.List;
import static org.db.core.aggregation.Aggregation.match;
/**
* @ClassName MongoStringSum字段字符串去重复
* @Author lpj
* @Date 2021/12/17 14:37
**/
@RestController
@RequestMapping("test")
@ApiIgnore
public class MongoStringSum {
@Autowired
private MongoTemplate mongoTemplate;
/**
* @Author: lpj
* @Date: 2021/8/28 20:37
* mongoDB统计字符串类型的数据和,以⽉份进⾏分组统计,且时间为字符串类型
*/
@GetMapping
public List<JSONObject> testSum() {
String tableName = "你要统计的表名";//名称列明
String name = "name";//名称列明
String date = "date";//⽇期列明
String score = "score";//分值列明
Aggregation banciAggregation = wAggregation(
match(Criteria.where(name).is("张三")),//条件筛选,统计名称为**的数据
//根据⽇期进⾏统计,⽇期为字符串数据,需特殊处理,这⾥是根据⽉份进⾏分组统计,截取⽇期字符串0-7则就为⽉份
Aggregation.project(date).andExpression(date).substring(0, 7).as("times")
//因为Mongo不能直接统计字符串求和操作,则对该字段的数据进⾏类型转换,转换为doubbo进⾏统计
.and(vertValueOf(score).to("int").onErrorReturn(0).onNullReturn(0)).as("class"), //根据处理后的时间进⾏分组,对处理后的要统计的字段数据进⾏求和
//从新挑选展⽰字段
Aggregation.project("times", "countSum").and("times").previousOperation());
AggregationResults<JSONObject> banciAggregate = mongoTemplate.aggregate(banciAggregation, tableName, JSONObject.class); List<JSONObject> results = MappedResults();//统计完成的数据就在该集合中,我们取出即可使⽤return results;
}
}
统计出的效果:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论