我想知道我无法使用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;
}
}
我想知道分组。这有必要吗? 我需要收藏吗?
答案 0 :(得分:0)
要计算window.location
,您需要avg
相似的记录并使用$group
运算符。
在您的情况下,您要计算所有匹配项的平均值,但我想您没有一个字段具有相同的值以用于所有过滤出的匹配项。在这种情况下,您可以按$avg
排序MongoDB组以计算平均值。
将您的null
阶段更改为以下阶段:
Group
将被翻译为:
GroupOperation groupByValue = group().avg("value").as("averageValue");