参考链接: Java中的聚合
Java Code Examples for org.springframework.data.mongodb.core.aggregation.Aggregation
@Override
public List<ApplicationDTO> getAppInfoByAppNames(List<String> names) {
Aggregation aggregation = newAggregation(
match(Criteria.where("appname").in(names).and("timestamp").exists(true)),
sort(new Sort(DESC, "timestamp")),
project("appname", "platform", "starrating",
"timestamp", "comment", "authorName","url"),
group("appname", "platform")
.push(new BasicDBObject("author", "$authorName")
.append("rate", "$starrating" )
.append("timestamp", "$timestamp")
.append("comment", "$comment")
.append("url", "$url")
).as("reviews"),
project("appname", "platform")
.and("reviews").slice(8, 0)
);
//Convert the aggregation result into a List
AggregationResults<ApplicationDTO> groupResults
= mongoTemplate.aggregate(aggregation, Review.class, ApplicationDTO.class);
return groupResults.getMappedResults();
}
在mongodb聚合操作的时候我们一般是通过一个字段或者多个字段作为聚合条件来完成的,
如上面的例子就是首先match作为想要聚合的范围,sort排序,group就是聚合的条件(上面的例子的统计条件是appname和platform)。
此外也可以使用push、first等来将合并的数据的其它字段显示出来,跟mongodb自带的聚合方式区别不大。