簡體   English   中英

在 MongoDB Java Driver 中聚合時解析數據類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM