[英]Parsing data type while aggregation in MongoDB Java Driver
我創建了一個每小時時間段,因為我想按小時對我的數據進行分組和計算(Sum、Avg、Stdv、Max、Min)。 這是我的代碼:
Bson startTimeBucket = match( gt("lastTimestamp",startTime));
Bson endTimeBucket= match(lte("lastTimestamp",finishTime));
Bson idFilterBucket = match(eq("id", IdManfc));
Bson unwindBucket = unwind("$signals");
Bson filterSignalUnBucket = match(eq("signals.signal",
mysignal));
Bson Bucket=bucket("$lastTimestamp", timeBucketList, new BucketOptions()
.defaultBucket("sum")
.output( min("id","$id"),
min("signal","$signals.signal"),
sum("Summation","$signals.value"),
avg("Average","$signals.value"),
stdDevSamp("STD","$signals.value"),
max("Max","$signals.value"),
min("Min","$signals.value")
)
);
List<Document> resultbuckt = coll.aggregate(asList(startTimeBucket,
endTimeBucket,
idFilterBucket,
unwindBucket,
filterSignalUnBucket,
Bucket
)).into(new ArrayList<Document>());
for (Document Document : resultbuckt) {
System.out.println(Document);
}
我的問題是我看到了我的結果,但 Sum 和 Avg 以及 Standard Deviation 為零或空值。 我只看到最小值和最大值的值。 我的猜測是因為數據類型是字符串類型,它不能應用數學運算,而對於 min 和 max,它甚至可以作為字符串使用。 有誰知道如何在聚合時將數據類型解析為加倍?
我的結果的一行:
Document{{_id=1574431200859, id=144-12, signal=InterfaceType.InjectionUnits.InjectionUnit_1.TemperatureZones.TemperatureZone_1.ActualTemperature, Summation=0, Average=null, STD=null, Max=72.0, Min=68.0}}
如果有人有任何提示,我將不勝感激。
謝謝
找到了解決辦法!
Bson startTimeBucket = match( gt("lastTimestamp",startTime));
Bson endTimeBucket= match(lte("lastTimestamp",finishTime));
Bson idFilterBucket = match(eq("id", IdManfc));
Bson unwindBucket = unwind("$signals");
Bson filterSignalUnBucket = match(eq("signals.signal", mysignal));
Bson Bucket=bucket("$lastTimestamp", timeBucketList, new BucketOptions()
.defaultBucket("sum")
.output(min("id","$id"),
min("signal","$signals.signal"),
avg("Average",Document.parse("{$toDouble: \"$signals.value\"}")),
stdDevSamp("STD",Document.parse("{$toDouble: \"$signals.value\"}")),
max("Max",Document.parse("{$toDouble: \"$signals.value\"}")),
min("Min",Document.parse("{$toDouble: \"$signals.value\"}"))
)
)
和一行結果:
Document{{_id=1574431200859, id=144-12, signal=InterfaceType.InjectionUnits.InjectionUnit_1.TemperatureZones.TemperatureZone_1.ActualTemperature, Average=69.98214285714286, STD=1.243032529795528, Max=72.0, Min=68.0}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.