Aggregation聚合查询2 group中的push的用法

group中的push的使用

伤情最是晚凉天,憔悴厮人不堪言,吆酒催肠三杯醉,寻香惊梦五更寒,
钗头凤斜倾有泪,徒迷花寥我无缘,小楼寂寞心与月,也难如钩也难圆!
大将生来胆气豪,腰横秋水雁翎刀,风吹橐鼓山河动,电闪旌旗日月高,
天上麒麟原有种,穴中蝼蚁岂能逃,太平待到归来日,朕与将军解战袍。

上次写了一篇对Aggregation聚合查询聚合查询的使用,有人对我提了group中的push的用法,因为之前也没有用过,通过翻看文档得到了如下的理解,不知道对不对,望共同进步
我早查询官方文档时的到了如下的结果

image.png

官方文档中有如下的解释:在结果文档中插入值到一个数组中。于是我猜想应该是在mongo数据库中有一个字段是一个集和,如果想要取到这个结合必然是要用到push这个方法。于是我在实体中加入了如下字段:

image.png

并且在数据库中填写了相对这个字段的数据如下:

image.png

写出了如下的聚合代码

//数据分组
    private List<Document> statisticsGroup(String dataSetId ,int year) {
        Criteria criteria = Criteria.where("dataSetId").is(dataSetId);
        criteria.and("year").is(year);
        Aggregation agg = Aggregation.newAggregation(
                Aggregation.match(criteria),
                Aggregation.group("month")
                        .first("month").as("month")
                        .count()
                        .as("monthCount")
                        .first("dataSetId").as("dataSetId")
                        .sum("clicks")
                        .as("sumClicks")
                        .sum("downloads")
                        .as("sumDownloads")
                        .first("dataSetType").as("dataSetType")
                        .push("extMetadata").as("extMetadata")
                ,
                Aggregation.sort(Sort.by(new Sort.Order(Sort.Direction.ASC, "month")))
        );
        AggregationResults<Document> result = mongoTemplate.aggregate(agg,Statistics.class, Document.class);
        return result.getMappedResults();
    }

获取封装的数据代码如下:

List<Map<String,Object>> extMetadata = (List<Map<String,Object>>)document.get("extMetadata");

这样就把List<Map<String,Object>>中的数据取了出来
作者理解push的使用是:如果数据库中有集合类型的字段就要通过push来获取。

想装个逼但是发现用first 和普通的document.get("extMetadata");就能获取集合,很难受白加班了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值