1.引言:
最近工作中使用到monoDB,因此将其记录下来,以便查阅。
参考文献:
1.https://blog.csdn.net/qq_31868149/article/details/82909510
2.https://www.cnblogs.com/ztk1994/p/8572843.html
2.聚合Aggregate:
聚合主要用于计算数据,表达式为db.集合名称.aggregate([{管道:{表达式}}])
在java代码中如下(转载自:https://blog.csdn.net/qq_31868149/article/details/82909510):
Aggregation agg = Aggregation.newAggregation(
Aggregation.match(criteria),//条件
Aggregation.group("a","b","c","d","e").count().as("f"),//分组字段
Aggregation.sort(sort),//排序
Aggregation.skip(page.getFirstResult()),//过滤
Aggregation.limit(pageSize)//页数
);
AggregationResults<Test> outputType=mongoTemplate.aggregate(agg,"test",Test.class);
List<Test> list=outputType.getMappedResults();
实际代码如下:
public List<FailTestItem> queryLine(Map<String,String>){
String stratDate = map.get("stratDate");
String endDate = map.get("endDate");
String project = map.get("project");
Criteria criteria = new Criteria();
criteria.and("project").is("project");
if(stratDate != null && !stratDate.isEmpty() && endDate != null && !endDate.isEmpty()){
criteria.and("beginTime").gte(startDate).lte(endDate);
}
MatchOperation match = Aggregation.match("criteria");
MongoTemplate mongoTemplate = MongoDBUtil.getMongoTemplate();
Aggregation agg = Aggregation.newAggregation(match,
Aggregation.group("project","testItem").count().as("num"),
Aggregation.project("num").and("_id.project").as("project").and("_id.testItem").as("testItem"),
Aggregation.sort(new Sort(Sort.Direction.ASC,"project").and(Sort.Direction.DESC,"num")),
Aggregation.limit(3));
AggregationResults<FailTestItem> results = mongoTemplate.aggregate(agg, "failTestItem", FailTestItem.class);
List<FailTestItem> lfti = results.getMappedResults();
}