无法使用MongoDB计算平均值

时间:2020-02-17 19:08:59

标签: mongodb spring-data mongotemplate

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

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

Result(id = 5e4adeca9eab5f052e2ac239,date = 2020-02-12, 值= 1.048097596376957)

我有兴趣获取从t1到t2的日期以及所有匹配项的平均值。

我在NPE中编写并编写的代码如下:

    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。 我认为matchCriteria是正确的。 对于GroupOperation,我有疑问。

2020-02-17 19:43:22.661调试10148 --- [nio-8080-exec-1] o.s.data.mongodb.core.MongoTemplate:执行聚合:[{ “ $ match”:{“ date”:{“ $ gte”:{“ $ date”:1581289200000},“ $ lte”: {“ $ date”:1581894000000}}}},{“ $ group”:{“ _id”:“ $ value”, 集合未知中的“ averageValues”:{“ $ avg”:“ $ value”}}}]

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 个答案:

答案 0 :(得分:0)

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

在您的情况下,您要计算所有匹配项的平均值,但我想您没有一个字段具有相同的值以用于所有过滤出的匹配项。在这种情况下,您可以按$avg排序MongoDB组以计算平均值。

将您的null阶段更改为以下阶段:

Group

将被翻译为:

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