我创建了一个小时时段,因为我想每小时对数据分组并进行一些计算(求和,平均,标准,最大值,最小值)。这是我的代码:
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",stdDevsamp("STD",max("Max",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为零或null。我只看到最小值和最大值的值。我猜测是因为数据类型是字符串类型,并且不能应用数学运算,而对于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}}
如果有人有任何提示,我将不胜感激。
谢谢