Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Spring数据MongoDB从集合中获取简单平均值_Mongodb_Spring Data_Aggregate_Spring Data Mongodb - Fatal编程技术网

使用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();