提问者:小点点

无法使用MongoDB计算平均值


我想知道我无法使用Spring 5和MongoDB计算平均值。

数据库中有40个这种格式的条目

结果(id=5e4adeca9eab5f052e2ac239,日期=2020-02-12,值=1.048097596376957)

我很想知道从t1到t2的时间以及所有比赛的平均值。

我在NPE中编写和ens的代码如下所示:

    MatchOperation filterDate = match(Criteria.where("date").gte(startWeek).lte(now));
    GroupOperation groupByValue = group("value").avg("value").as("averageValue");

    Aggregation aggregation = newAggregation(filterDate, groupByValue);
    AggregationResults<Document> result = mongoTemplate.aggregate(aggregation, "unknown", Document.class);

    Document document = result.getUniqueMappedResult();
    document.getDouble("averageValue");

当getDouble将被调用时,会发生NPE。在我看来,匹配标准是正确的。通过组操作,我有我的怀疑。

2020-02-17 19:43:22.661 DEBUG 10148-[nio-8080-exec-1]o . s . data . MongoDB . core . mongotemplate:执行聚合:[{ " $ match ":{ " date ":{ " $ GTE ":{ " $ date ":1581289200000 }," $ LTE ":{ " $ date ":1581894000000 } } },.

import org.springframework.data.annotation.Id;


public class Result {

    @Id
    private String id;

    private LocalDate date;

    private Double value;

    public Result(LocalDate date, Double value) {
        this.date = date;
        this.value = value;
    }
}

我想知道分组情况。这有必要吗?我需要收藏吗?


共1个答案

匿名用户

要计算avg,您需要$group相似记录并使用$avg运算符。

在您的例子中,您想要计算所有匹配的平均值,但是我猜您没有一个字段对所有过滤的匹配具有相同的值。在这种情况下,您可以通过< code>null命令MongoDB group来计算平均值。

将您的< code>Group阶段更改为以下内容:

GroupOperation groupByValue = group().avg("value").as("averageValue");

这将被翻译为:

{ "$group" : { "_id" : null, "averageValues" : { "$avg" : "$value"}}