将每个数组对象转换为单个值

时间:2018-01-05 14:26:04

标签: mongodb mongodb-query aggregation-framework

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

{
    "_id" : ObjectId("598446bb13c7141f1"),
    "trackerId" : "598446ba-fa9b-4000-8000-4ea290e",
    "powerMetrics" : [ 
        {
            "duration" : 0.15,
            "powerConsumption" : 0.1
        }, 
        {
            "duration" : 0.1,
            "powerConsumption" : 0.05
        }
    ]
}

我的目标是获取另一个文档,其中包含powerMetrics数组,该数组包含以下列方式计算的小数:powerConsumption/duration因此我得到:

{
     ....
    "powerMetrics" : [ 
        {
            0.6666
        }, 
        {
            0.5
        }
    ]
}

powerMetrics的大小可以是动态的和未知的。

我搜索过,无法找到如何实现这一目标,并感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用$map$divide一起输出3.4 mongo版本中的小数值。

db.col_name.aggregate([
  {
    "$addFields": {
      "powerMetrics": {
        "$map": {
          "input":"$powerMetrics",
          "in": {"$divide":["$$this.powerConsumption","$$this.duration"]}
        }
      }
    }
  }
])

答案 1 :(得分:1)

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

    ]



);