Mongo 常用需求整理

1. mongo 按照时间区间 + 年-月分组统计

		Date begin = DateUtil.parse(String.valueOf(year) + DAY_OF_MONTH);
        Date end = DateUtil.parse(String.valueOf(year + 1) + DAY_OF_MONTH);
        // 初始化当年 12月
        List<String> timeList = new ArrayList<>();
        for (int i = 0; i < 12; i++) {
            DateTime dateTime = DateUtil.offsetMonth(begin, i);
            timeList.add(DateUtil.format(dateTime, YEAR_MONTH));
        }
        Criteria criteria = new Criteria();
        criteria.and(MongoFieldsConstants.COLLECT_MONTH).in(timeList);
        List<AggregationOperation> operations = new ArrayList<>();
        //查询条件,字段在我指定的日期中
      operations.add(Aggregation.project("catalog_id","status","_id","origin_department","theme_id","create_time")
                .andExpression("{$dateToString:{ format:'%Y-%m',date: '$create_time', timezone: 'Asia/Shanghai'}}").as("$collectMonth")
                .andExpression("{$dateToString:{ format:'%Y',date: '$create_time', timezone: 'Asia/Shanghai'}}").as("$year")
                .andExpression("{$dateToString:{ format:'%m',date: '$create_time', timezone: 'Asia/Shanghai'}}").as("$month"));
        operations.add(Aggregation.match(criteria));
        //按月分组统计;group分组,会将分组字段放入_id中,如果需要显示该字段,可以用聚合函数中的其中一个标记一下
                 operations.add(Aggregation.group(MongoFieldsConstants.THEME_ID,MongoFieldsConstants.ORIGIN_DEPARTMENT,MongoFieldsConstants.COLLECT_MONTH)
                    .count().as(MongoFieldsConstants.ROWS)
                    .first("year").as("year")
                    .first("month").as("month"));
        
        Aggregation aggregation = Aggregation.newAggregation(operations);
        return mongoTemplate.aggregate(aggregation, Constants.DMS_COLLECTION_NAME_DATA_RESOURCE, DataResVisualDTO.class).getMappedResults();

2. mongo 分页统计

  • find
        //创建排序模板Sort
        Sort sort = new Sort(Sort.Direction.DESC, "creationDate");//创建分页模板Pageable 
        Pageable pageable = PageRequest.of(page - 1, pageSize, Sort.by(Sort.Order.asc("create_time")));
        Query query = new Query().with(pageable);

  • Aggregation
		// 排序规则
		Sort sort = Sort.by(Sort.Direction.ASC, "_id");
        Aggregation agg = Aggregation.newAggregation(
                Aggregation.group("source_type").count().as("amount"),
                Aggregation.sort(sort)
        );
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值