在MongoDB数据库中我们可能需要对已有数据进行聚合,这里我简单的描述一下如何进行分组查询,输出自己想要的数据结果
//注入mongoDB模板
@Resource
private MongoTemplate mongoTemplate;
//这里我主要是想要查询某个时间段的集合数据
//以下代码对应的mysql语句为 "select packageId,trackingId,openId from report group by trackingId where timestamp > " + startTime + " and timestamp < " + endTime
public List<MongoReport2Date> getMongoDataReport2Date(Long startTime,Long endTime){
Aggregation agg = Aggregation.newAggregation(
// 第一步:挑选所需的字段,类似select *,*所代表的字段内容
//因为我的数据是嵌套的对象,所以需要下面这种写法
Aggregation.project("report.packageProgress.packageId", "report.packageProgress.trackingId", "report.packageProgress.openId","report.packageProgress.timestamp"),
// 第二步:sql where 语句筛选符合条件的记录
Aggregation.match(
Criteria.where("packageProgress.timestamp").and("addedDate").gte(startTime).lte(endTime)),
// 第三步:分组条件,设置分组字段
Aggregation.group("packageProgress.trackingId")
.last("packageId").as("packageId")
.last("trackingId").as("trackingId")
.last("openId").as("openId"),
// 增加publishDate为分组后输出的字段
// 第四步:重新挑选字段
Aggregation.project("packageId", "trackingId", "openId")
);
//将输出的内容编译成我们自己想要的MongoReport2Date对象,这个对象Bean根据自己的需求创建
AggregationResults<MongoReport2Date> results = mongoTemplate.aggregate(agg, "report", MongoReport2Date.class);
List<MongoReport2Date> list = results.getMappedResults();
return list;
}
网友评论