Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB Java驱动程序中的Bucket聚合和分组_Java_Mongodb_Mongodb Query_Mongodb Java_Mongodb Java 3.3.0 - Fatal编程技术网

MongoDB Java驱动程序中的Bucket聚合和分组

MongoDB Java驱动程序中的Bucket聚合和分组,java,mongodb,mongodb-query,mongodb-java,mongodb-java-3.3.0,Java,Mongodb,Mongodb Query,Mongodb Java,Mongodb Java 3.3.0,我使用MongoDB Java驱动程序V3.2进行了一个简短的查询,以从MongoDB获取一些数据。我正在使用Bucket and Unwind aggregation使我的工作和结果更有意义。我根据特定的id字段(IdManfc)和特定的信号字段(mysignal)制作了一个过滤器。我的目标是使用bucket聚合根据一些边界(逐小时时间戳)对数据进行分组,从而得到一个结果。我想在结果中显示id和信号,这就是为什么我使用传统的SQL技巧(min(id),因为我只过滤了一个id)和(min(sig

我使用MongoDB Java驱动程序V3.2进行了一个简短的查询,以从MongoDB获取一些数据。我正在使用Bucket and Unwind aggregation使我的工作和结果更有意义。我根据特定的id字段(IdManfc)和特定的信号字段(mysignal)制作了一个过滤器。我的目标是使用bucket聚合根据一些边界(逐小时时间戳)对数据进行分组,从而得到一个结果。我想在结果中显示id信号,这就是为什么我使用传统的SQL技巧(min(id),因为我只过滤了一个id)和(min(signal),因为我只过滤了一个信号)在结果中包括我的id信号。现在我想改变一下我的理论,我想想象我只有一个id,但是有很多信号,我想把它们包括在我的结果中,id是一,但是每个信号的信息是不同的。或者如果我有很多ID和信号,我想把它们包括在我的结果中。有人知道吗

关于idsignal的一些提示在我的代码中,id是指工厂中的机器,signal是指机器所做的工作类型。假设工厂中的一台计算机id为12345,它执行三种类型的工作,这些工作由信号识别,一个信号是打印(信号名称X)
,第二个信号是扫描(Y)
,第三个信号是不工作(Z)。现在我想制作一个bucket,指定机器id(12345)及其工作类型,逐小时分组,并计算每个信号花费的时间(即值)的最小值和最大值

    Bson startTimeBucket = match( gte("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\"}"))
            )
    );

    List<Document> resultbuckt = coll.aggregate(asList(startTimeBucket,
                                                        endTimeBucket,
                                                        idFilterBucket,
                                                        unwindBucket,
                                                        filterSignalUnBucket,
                                                        Bucket
                                                )).into(new ArrayList<Document>());
    for (Document Document : resultbuckt) {
        System.out.println(Document);
2行相同信号和不同时间的结果(因为我使用桶和时间边界对结果进行分组:

Document{{_id=1574434800859, id=144-12, signal=signal 1, Average=69.86274509803921, STD=1.2003267528991806, Max=71.0, Min=68.0}}
Document{{_id=1578444800859, id=144-12, signal=signal 1, Average=69.86274509803921, STD=1.2003267528991806, Max=72.0, Min=69.0}}
在我的代码中,我专门过滤了一个信号,然后在结果中使用min(信号)。 我希望从结果中看到与我已经得到的结果类似的结果。但我也希望在该时间范围(“\u id”)内获得其他信号的结果,并且仅移除一个信号的过滤器,我希望如下所示:

Document{{_id=1574434800859, id=144-12, signal=**the name of 1st signal**, Average=69.86274509803921, STD=1.20035267528991806, Max=80.0, Min=68.0}}
Document{{_id=1574434800859, id=144-12, signal=**the name 2nd signal**, Average=69.86274509803921, STD=12.2003267528991806, Max=95.0, Min=68.0}}
Document{{_id=1574434800859, id=144-12, signal=**the name of 3rd signal**, Average=69.86274509803921, STD=0.2003267528991806, Max=85.0, Min=68.0}}
有人知道吗


谢谢

post please sample data and expected result我编辑了我的帖子。谢谢你的评论。如果你能帮助我将帖子样本数据输出为JSON(文本模式),我将不胜感激。我添加了JSON格式,但我的数据非常大,我添加了一小部分JSON。我为这篇不清楚的帖子道歉。
Document{{_id=1574434800859, id=144-12, signal=**the name of 1st signal**, Average=69.86274509803921, STD=1.20035267528991806, Max=80.0, Min=68.0}}
Document{{_id=1574434800859, id=144-12, signal=**the name 2nd signal**, Average=69.86274509803921, STD=12.2003267528991806, Max=95.0, Min=68.0}}
Document{{_id=1574434800859, id=144-12, signal=**the name of 3rd signal**, Average=69.86274509803921, STD=0.2003267528991806, Max=85.0, Min=68.0}}