mongodb字段分类统计

/**
* @Author: mahongfei
* @description: 求职人婚姻状况比例(饼状图)
*/
@Override
public Result statisticsMarriage() {
List operations = new ArrayList<>();
operations.add(Aggregation.group(“marriage”).count().as(“count”));
Aggregation aggregationCount = Aggregation.newAggregation(operations);
AggregationResults results = mongoTemplate.aggregate(aggregationCount, “cv”, Map.class);
Map<String, Object> totalMap = new HashMap<>();
List<Map<String, Object>> list = results.getMappedResults();
List<Map<String, Object>> sexlist = new ArrayList<>();
List nameList = new ArrayList<>();
Integer other = 0;
for (Map<String, Object> map : list) {
if (map.get("_id").equals(1)) {
Map<String, Object> sexMap = new HashMap<>();
sexMap.put(“name”, “已婚”);
nameList.add(“已婚”);
sexMap.put(“value”, map.get(“count”));
sexlist.add(sexMap);
} else {
other = other + (Integer) map.get(“count”);
}

	}
	if (other > 0) {
		Map<String, Object> sexMap = new HashMap<>();
		sexMap.put("name", "未婚");
		nameList.add("未婚");
		sexMap.put("value", other);
		sexlist.add(sexMap);
	}
	totalMap.put("name", nameList);
	totalMap.put("value", sexlist);
	return Result.newSuccess().withData(totalMap);
}

/**
 * @Author: mahongfei
 * @description: 当前薪资范围比例 (需要先指定薪资范围档次,饼状图)
 */
@Override
public Result statisticsSalary() {
	// 分区间统计薪资
	Long total0 = mongoTemplate.count(new Query(Criteria.where("currentSalary").is(0)), CV.class);
	Long total6 = mongoTemplate.count(new Query(Criteria.where("currentSalary").gt(Constants.SALARY_RATE * 5)), CV.class);

	//薪资名称添加到list
	List<Map<String, Object>> list = new ArrayList<>();
	List<String> nameList = new ArrayList<>();
	nameList.add("未知");
	//薪资添加到map
	for (int i = 0; i < 5; i++) {
		Map<String, Object> totalMap = new HashMap<>(2);
		Long total = mongoTemplate.count(new Query(Criteria.where("currentSalary").gt(Constants.SALARY_RATE * i).lte(Constants.SALARY_RATE * (i + 1))), CV.class);
		totalMap.put("name", Constants.SALARY_RATE * i + "-" + Constants.SALARY_RATE * (i + 1) + "万");
		totalMap.put("value", total == null ? 0 : total);
		nameList.add(Constants.SALARY_RATE * i + "-" + Constants.SALARY_RATE * (i + 1) + "万");
		list.add(totalMap);
	}
	nameList.add(Constants.SALARY_RATE * 5 + "万以上");
	Map<String, Object> totalMap0 = new HashMap<>(2);
	Map<String, Object> totalMap6 = new HashMap<>(2);
	totalMap0.put("name", "未知");
	totalMap0.put("value", total0 == null ? 0 : total0);
	list.add(totalMap0);
	totalMap6.put("name", Constants.SALARY_RATE * 5 + "万以上");
	totalMap6.put("value", total6 == null ? 0 : total6);
	list.add(totalMap6);

	// 名称与薪资区间添加到map
	Map<String, Object> map = new HashMap<>();
	map.put("name", nameList);
	map.put("value", list);
	return Result.newSuccess().withData(map);
}

 * /**
 * @Author: mahongfei
 * @description: 描述: 最近一个月每天新增数量
 */
@Override
public Result cvAdd() {
	Map map = new HashMap();
	List<String> listTime = new ArrayList<>();
	List<Long> value = new ArrayList<>();
	for (int i = 30; i > -1; i--) {
		Date now = new Date();
		Calendar cal1 = Calendar.getInstance();
		cal1.setTime(now);
		cal1.set(Calendar.HOUR_OF_DAY, 0);
		cal1.set(Calendar.MINUTE, 0);
		cal1.set(Calendar.SECOND, 0);
		cal1.set(Calendar.MILLISECOND, 0);
		now = cal1.getTime();
		Date startDate = DateUtils.addDays(now, -i);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		String time = sdf.format(startDate);
		listTime.add(time);
		int num;
		if (i != 0) {
			num = -(i - 1);
		} else {
			num = +(i + 1);
		}
		Long val = mongoTemplate.count(new Query(
				new Criteria()
						.andOperator(
								Criteria.where("createTime").gt(startDate),
								Criteria.where("createTime").lt(DateUtils.addDays(now, num))
						)), CV.class);
		value.add(val);
	}
	for (int i = 0; i < listTime.size(); i++) {
		listTime.set(i, listTime.get(i).substring(5));
	}
	map.put("name", listTime);
	map.put("value", value);
	return Result.newSuccess().withData(map);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值