如何获取spring mongo模板中的聚合查询计数

时间:2015-09-25 15:00:54

标签: mongodb spring-mongodb

我使用spring mongo模板在mongodb上运行一个同意查询。我想知道有没有办法找出spring mongo模板中聚合结果的数量?

这是我的聚合示例:

Aggregation agg = newAggregation(Class1.class,
            match(criteria),
            group("prop1", "prop2")
            .avg("x").as("averageX")
        );

我只需要知道如何在spring mongo模板中计算这个聚合结果。

2 个答案:

答案 0 :(得分:2)

我的反应很晚,但可能对其他人有所帮助。要获得聚合的计数,您需要在最后添加一个新组:

在汇总结束时添加 - > Aggregation.group()。count()。as(" count")得到计数

Aggregation aggregation = newAggregation(
            Aggregation.match(Criteria.where("x").is(x).and("y").exists(true)),
            Aggregation.group("x", "y"),
            Aggregation.group().count().as("count") 
);

要计算:

Long.parseLong(results.getMappedResults().get(0).get("count").toString());

答案 1 :(得分:0)

对于 spring data mongo 2.1.4

如果您假设自己的返回类是这样的:

class Output{
  Object x;
  Object y;
  /**getter and setter**/
}

您可以使用以下代码:

1。保留分组数据:

AggregationResults<Output> result = 
                mongoTemplate.aggregate(
                        agg ,
                        "YOUR_DOCUMENT",
                        Output.class
                );
int count = result.getMappedResults().size();

2。仅获得计数:(分组直到您使用first(...)last(...)用法后才有效)

Aggregation agg = Aggregation.newAggregation(
                      match(criteria),
                      count().as("x")/*using x only for mapping count*/
                   );
    AggregationResults<Output> result = 
                    mongoTemplate.aggregate(
                            agg ,
                            "YOUR_DOCUMENT",
                            Output.class
                    );
    int count = result.getMappedResults().get(0).getX().get(0);/**o_O**/