我使用spring mongo模板在mongodb上运行一个同意查询。我想知道有没有办法找出spring mongo模板中聚合结果的数量?
这是我的聚合示例:
Aggregation agg = newAggregation(Class1.class,
match(criteria),
group("prop1", "prop2")
.avg("x").as("averageX")
);
我只需要知道如何在spring mongo模板中计算这个聚合结果。
答案 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**/