spring boot 使用 MongoTemplate 进行分

2020-04-17  本文已影响0人  墨兮之

在MongoDB数据库中我们可能需要对已有数据进行聚合,这里我简单的描述一下如何进行分组查询,输出自己想要的数据结果

    //注入mongoDB模板
   @Resource
    private MongoTemplate mongoTemplate;

    //这里我主要是想要查询某个时间段的集合数据
    //以下代码对应的mysql语句为 "select packageId,trackingId,openId from report group by trackingId where timestamp > " + startTime + " and timestamp <  " + endTime
    public List<MongoReport2Date> getMongoDataReport2Date(Long startTime,Long endTime){
        Aggregation agg = Aggregation.newAggregation(
                // 第一步:挑选所需的字段,类似select *,*所代表的字段内容
                //因为我的数据是嵌套的对象,所以需要下面这种写法
                Aggregation.project("report.packageProgress.packageId", "report.packageProgress.trackingId", "report.packageProgress.openId","report.packageProgress.timestamp"),
                // 第二步:sql where 语句筛选符合条件的记录
                Aggregation.match(
                       Criteria.where("packageProgress.timestamp").and("addedDate").gte(startTime).lte(endTime)),
                // 第三步:分组条件,设置分组字段
                Aggregation.group("packageProgress.trackingId")
                        .last("packageId").as("packageId")
                        .last("trackingId").as("trackingId")
                        .last("openId").as("openId"), 
                        // 增加publishDate为分组后输出的字段
                // 第四步:重新挑选字段
                Aggregation.project("packageId", "trackingId", "openId")
        );
        //将输出的内容编译成我们自己想要的MongoReport2Date对象,这个对象Bean根据自己的需求创建
        AggregationResults<MongoReport2Date> results = mongoTemplate.aggregate(agg, "report", MongoReport2Date.class);
        List<MongoReport2Date> list = results.getMappedResults();
        return list;
    }
上一篇下一篇

猜你喜欢

热点阅读