我想知道我无法使用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;
}
}
我想知道分组情况。这有必要吗?我需要收藏吗?
要计算avg
,您需要$group
相似记录并使用$avg
运算符。
在您的例子中,您想要计算所有匹配的平均值,但是我猜您没有一个字段对所有过滤的匹配具有相同的值。在这种情况下,您可以通过< code>null命令MongoDB group来计算平均值。
将您的< code>Group阶段更改为以下内容:
GroupOperation groupByValue = group().avg("value").as("averageValue");
这将被翻译为:
{ "$group" : { "_id" : null, "averageValues" : { "$avg" : "$value"}}