在MongoDB Java驱动程序中聚合时解析数据类型

我创建了一个小时时段,因为我想每小时对数据分组并进行一些计算(求和,平均,标准,最大值,最小值)。这是我的代码:

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}}

如果有人有任何提示,我将不胜感激。

谢谢

hlplyz 回答:在MongoDB Java驱动程序中聚合时解析数据类型

找到了解决方案!

        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",max("Max",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}}
本文链接:https://www.f2er.com/2710596.html

大家都在问