Spring数据mongo聚合映射到对象

时间:2016-09-28 14:05:38

标签: mongodb spring-data aggregation-framework spring-data-mongodb mongodb-aggregation

我想将聚合的结果映射到POJO而不迭代原始结果。 POJO是Collection中的一个字段,我在该字段中运行聚合。

MatchOperation match = match(Criteria.where("drill").is(drill));
SortOperation sort = sort(DESC, "creationDate");
GroupOperation group = group("athlete").first("athlete").as("athlete");
LimitOperation limit = limit(10);
ProjectionOperation project = project("athlete");

Aggregation aggregation = newAggregation(match, sort, group, limit, project);
AggregationResults<Athlete> results = mongoTemplate.aggregate(aggregation, DrillResultInfo.class, Athlete.class);
List<Athlete> mappedResult = results.getMappedResults();

它返回正确数量的对象,但它们的id为对象的映射,其他属性为null。

结果:

id: { "_id" : { "$oid" : "57cd46780348276373579821"} , "_class" : "Athlete" , "firstName" : "Jenny" , "lastName" : "Smith" ....}

其余属性为null。

收藏品:

public class DrillResultInfo {

@Id
private String id;
private Long resultId;

@DBRef
private Athlete athlete;
@DBRef
private Drill drill;
....
}

(....表示遗漏数据)

更新

我已对代码进行了一些更新以使其正常工作:

List<Athlete> respone = new ArrayList<>();
MatchOperation match = match(Criteria.where("drill").is(drill));
SortOperation sort = sort(DESC, "creationDate");
GroupOperation group = group("athlete");
LimitOperation limit = limit(5);
SkipOperation skip = skip(skipElements);
ProjectionOperation project = project("_id");

TypedAggregation<DrillResultInfo> agg = newAggregation(DrillResultInfo.class, match, sort, group, skip, limit, project);
AggregationResults<Object> results = mongoTemplate.aggregate(agg, Object.class);
List<Object> mappedResult = results.getMappedResults();

for (Object obj : mappedResult) {
    Athlete ath = (Athlete) ((LinkedHashMap) obj).get("_id");
    respone.add(ath);
}

return respone;

我想摆脱for

0 个答案:

没有答案