Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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驱动程序在投影阶段聚合表达式_Java_Mongodb - Fatal编程技术网

如何使用$平均;使用mongodb java驱动程序在投影阶段聚合表达式

如何使用$平均;使用mongodb java驱动程序在投影阶段聚合表达式,java,mongodb,Java,Mongodb,我有一个名为Buffer的集合,其中的文档如下所示: { "load" : { "metric" : { "behind" : 35, "side" : 15, "top" : 135, "front" : 0 } } } { "load" : { "metric" : { "behind" : 35, "

我有一个名为Buffer的集合,其中的文档如下所示:

{ "load" : { "metric" : { "behind" : 35, "side" : 15, "top" : 135, "front" : 0 } } }

{ "load" : { "metric" : { "behind" : 35, "side" : 76, "top" : 120, "front" : 13 } } }

{ "load" : { "metric" : { "behind" : 47, "side" : 122, "top" : 0, "front" : 25 } } }

{ "load" : { "metric" : { "behind" : 67, "side" : 88, "top" : 11, "front" : 38 } } }

{ "load" : { "metric" : { "behind" : 100, "side" : 9, "top" : 42, "front" : 41 } } }

{ "load" : { "metric" : { "behind" : 119, "side" : 56, "top" : 12, "front" : 59 } } }

{ "load" : { "metric" : { "behind" : 131, "side" : 90, "top" : 34, "front" : 62 } } }

{ "load" : { "metric" : { "behind" : 165, "side" : 145, "top" : 56, "front" : 176 } } }
我想使用聚合并计算边值和顶值的平均值。 我还想一起计算前后值的平均值,我的意思是计算前后值之和,然后根据这两个字段的平均值来计算。 我在mongo shell里找到了这个 命令如下:

db.Buffer.aggregate([
    {
        $group: {
            _id: null,
            avgOfTop: { $avg: "$load.metric.top" },
            avgOfFront: { $sum: "$load.metric.front" },
            avgOfBehind: { $sum: "$load.metric.behind" },
            avgOfSide: { $avg: "$load.metric.side" },
        },
    },
    { $project: { avgOfBackAndForth: { $avg: ["$avgOfFront", "$avgOfBehind"] }, avgOfTop: 1, avgOfSide: 1, _id: 0 } },
]);
结果是:

{ "avgOfTop" : 51.25, "avgOfSide" : 75.125, "avgOfBackAndForth" : 556.5 }
但我不知道如何在java的投影阶段实现avg表达式

我的java代码:

MongoCollection<Document> collection =MongoConnectionManager.getInstance().getMongoCollection();
         final List<BsonField> bsonFieldList = new ArrayList<>();
        bsonFieldList.add(avg("averageOfTop","$load.metric.top"));
        bsonFieldList.add(avg("averageOfSide","$load.metric.side"));
        bsonFieldList.add(sum("sumOfFront","$load.metric.front"));
        bsonFieldList.add(sum("sumOfBehind","$load.metric.behind"));
        
        Bson match = match(gte(ConstantStrings.ID_KEY,0));
        Bson group = group(null,bsonFieldList);
        Bson project = project(fields(excludeId(),
                include(ConstantStrings.AVERAGE_OF_TOP_METRICS,ConstantStrings.AVERAGE_OF_SIDE_METRICS)
               // computed(ConstantStrings.AVERAGE_OF_BACK_AND_FORTH_METRICS,query)
                ));

        AggregateIterable<Document> rs = collection.aggregate(Arrays.asList(match,group,project));
        for (Document dbObject : rs)
        {
            System.out.println(dbObject.toJson());
        }
MongoCollection collection=MongoConnectionManager.getInstance().getMongoCollection();
最终列表bsonFieldList=新的ArrayList();
添加(avg(“averageOfTop”,“$load.metric.top”);
添加(平均(“averageOfSide”,“$load.metric.side”);
添加(总和(“sumOfFront”,“$load.metric.front”);
添加(总和(“sumOfBehind”,“$load.metric.behind”);
Bson match=match(gte(ConstantStrings.ID_键,0));
Bson group=group(空,bsonFieldList);
Bson project=project(字段(excludeId(),
包括(ConstantStrings.AVERAGE_OF_TOP_度量、ConstantStrings.AVERAGE_OF_SIDE_度量)
//计算(常量字符串。前后度量的平均值,查询)
));
AggregateIterable rs=collection.aggregate(Arrays.asList(匹配、组、项目));
for(文档dbObject:rs)
{
System.out.println(dbObject.toJson());
}
结果是: {“averageOfTop”:51.25,“averageOfSide”:75.125}

MongoDB java驱动程序文档声明: 对于
$group
累加器表达式,Java驱动程序提供累加器帮助类。对于其他聚合表达式,请手动生成表达式文档

但是我不知道如何使用
Projection.compute()
来构建
{avgOfBackAndForth:{$avg:[“$avgOfFront”,“$avgOfBehind”]}
任何帮助都将不胜感激。 谢谢