使用Spring数据MongoDB从集合中获取简单平均值
我需要得到所有迭代的平均持续时间。我有我在下面解释的实体:使用Spring数据MongoDB从集合中获取简单平均值,mongodb,spring-data,aggregate,spring-data-mongodb,Mongodb,Spring Data,Aggregate,Spring Data Mongodb,我需要得到所有迭代的平均持续时间。我有我在下面解释的实体: @Document(collection = IterationEntity.COLLECTION_NAME) public class IterationEntity { public final static String COLLECTION_NAME = "iterations"; @Id private ObjectId id; @Field("start_date") priva
@Document(collection = IterationEntity.COLLECTION_NAME)
public class IterationEntity {
public final static String COLLECTION_NAME = "iterations";
@Id
private ObjectId id;
@Field("start_date")
private Date startDate;
@Field("finish_date")
private Date finishDate;
@Field("duration")
private Long duration;
@Field("total_tasks")
private Integer totalTasks = 0;
@Field("total_failed_tasks")
private Integer totalFailedTasks = 0;
@Field("total_comments")
private Integer totalComments = 0;
@Field("tasks")
@DBRef
@CascadeSave
private Set<TaskEntity> tasks = new HashSet<>();
}
当执行该方法时,我得到以下异常:
org.springframework.data.mapping.model.MappingException: No mapping metadata found for java.lang.Long
提前感谢。为了正确映射聚合结果,需要将其映射到域类型,或者只映射到返回的
文档。
下面这样的东西应该可以满足您的需求
class AggResult {
@Field("total_duration") Long duration;
@Field("avg_duration") Double avgDuration;
}
return template
.aggregate(aggregation, COLLECTION_NAME, AggResult.class)
.getUniqueMappedResult()
.getAvgDuration();
在上面的聚合查询中,您将返回sum和average,同时为函数mongoTemplate.aggregate指定Long作为类类型。我想这就是问题所在
class AggResult {
@Field("total_duration") Long duration;
@Field("avg_duration") Double avgDuration;
}
return template
.aggregate(aggregation, COLLECTION_NAME, AggResult.class)
.getUniqueMappedResult()
.getAvgDuration();