Я создал почасовой интервал времени, потому что я хотел сгруппировать и выполнить некоторые вычисления (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);
}
И моя проблема в том, что я вижу свой результат, но сумма, среднее и стандартное отклонение равны нулю или равны нулю. Я вижу только значения для мин и макс. Я предполагаю, что тип данных - это строковый тип, и он не может применять математические операции, в то время как для 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}}
Буду благодарен, если у кого-нибудь есть подсказка.
Спасибо