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 根据对象字段从由对象组成的数组中获取平均值_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

Mongodb 根据对象字段从由对象组成的数组中获取平均值

Mongodb 根据对象字段从由对象组成的数组中获取平均值,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有一份结构如下的文件: { "_id" : ObjectId("598446bb13c7141f1"), "trackerId" : "598446ba-fa9b-4000-8000-4ea290e", "powerMetrics" : [ { "duration" : 0.15, "powerConsumption" : 0.1 }, { "du

我有一份结构如下的文件:

{
    "_id" : ObjectId("598446bb13c7141f1"),
    "trackerId" : "598446ba-fa9b-4000-8000-4ea290e",
    "powerMetrics" : [ 
        {
            "duration" : 0.15,
            "powerConsumption" : 0.1
        }, 
        {
            "duration" : 0.1,
            "powerConsumption" : 0.05
        }
    ]
}
我的目标是得到另一个文档,它将包含一个avgMetric值。此
avgMetrics
应使用powerMetrics数组按以下方式计算:

    (powerMetrics[0].powerConsumption/powerMetrics[0].duration 
  + powerMetrics[1].powerConsumption/powerMetrics[1].duration) /  powerMetrics.size()
因此,这个
avgMetrics
应该表示
powerMetrics
数组中所有(功耗/持续时间)的平均值

在尝试查询之后,我无法实现这一点

powerMetrics阵列的大小可能会有所不同,Mongo db版本为3.2.14

有人能帮忙吗


谢谢

您可以使用
$map
$avg
在3.2 mongo版本中输出avg

db.col_name.aggregate(
[{"$project":{
  "avgMetrics":{
    "$avg":{
      "$map":{
        "input":"$powerMetrics",
         "as":"val",
         "in":{"$divide":["$$val.powerConsumption","$$val.duration"]}
      }
    }
  }
}}])
db.collection.aggregate(

    // Pipeline
    [
        // Stage 1
        {
            $unwind: {
                path: "$powerMetrics",
                preserveNullAndEmptyArrays: true // optional
            }
        },

        // Stage 2
        {
            $group: {
                _id: '$_id',
                metrics: {
                    $addToSet: {
                        $divide: ['$powerMetrics.powerConsumption', '$powerMetrics.duration']
                    }
                }
            }
        },

        // Stage 3
        {
            $project: {
                avgVal: {
                    $avg: '$metrics'
                }
            }
        },

    ]



);