Spring数据mongodb - 聚合框架集成

And*_*dna 8 mongodb spring-data aggregation-framework

我开始MongoDB在我的应用程序中使用数据库,为了数据访问,我选择了Spring Data for MongoDB.

我浏览了API参考和文档,我可以看到有map-reduce集成但是聚合框架呢?我可以看到它支持group by操作,这表明它支持$group运营商判断:http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/,但是其他运营商呢,那是现在不支持?

我问的是这个问题,因为我想知道与MongoDBSping Data 有什么样的集成,所以我知道会发生什么,可以这么说.

Ron*_*fin 8

Spring Data 1.3.0.RC1可用,它确实支持聚合框架.

例如:shell聚合命令:

db.eft_transactions.aggregate(
    {$match:
        {
            service:"EFT",
            source:"MARKUP",
        }
    },
    {$group:
        {
            _id:"$card_acceptor_id",
            tran_count:{$sum:1},
            amount_sum:{$sum:"$amount"}
        }
    }
)
Run Code Online (Sandbox Code Playgroud)

从java运行如下:

    AggregationOperation match = Aggregation.match(Criteria.where("service").is("EFT").and("source").is("MARKUP"));
    AggregationOperation group = Aggregation.group("card_acceptor").and("amount_sum").sum("amount").and("tran_count").count();
    Aggregation aggregation = newAggregation(match, group);
    AggregationResults<StoreSummary> result = this.mongoTemplate.aggregate(aggregation, "eft_transactions", StoreSummary.class);
Run Code Online (Sandbox Code Playgroud)

文档在这里

注意:我们最近不得不切换到使用版本1.3.0的BUILD-SNAPSHOT版本.此更改需要更改上述两行已更改为:

AggregationOperation group = Aggregation.group("card_acceptor").sum("amount").as("amount_sum").count().as("tran_count");
Aggregation aggregation = Aggregation.newAggregation(match, group);
Run Code Online (Sandbox Code Playgroud)


Ori*_*Dar 5

Spring Data MongoOperations.group()方法映射到db.collection.group()MongoDB命令而不是$group聚合函数.目前,Spring Data MongoDB不支持聚合框架.正如您所提到的,Map reduce虽然受到支持

  • 但是,只要您需要聚合框架的强大功能,您就可以向mongodb Java驱动程序迈出一步.`mongoOps.getCollection("yourCollection").aggregate(...)` (6认同)