如何使用MongoDB计算多个字段的平均值?

时间:2016-06-24 13:28:16

标签: php mongodb mongodb-query

我收集了该集合3字段。这些字段采用arrayIndex格式。收集样本如下

    { 
        "_id" : ObjectId("576165f58d8b8f39458b456c"), 
        "EventTS" : ISODate("2016-06-07T03:30:00.000+0000"), 
        "PowerStatus" : [
           NumberInt(1), 
           NumberInt(1), 
           null, 
           NumberInt(1), 
           null
         ], 
        "TempStatus" : [
           NumberInt(1), 
           null, 
           NumberInt(1), 
           null, 
           null
        ], 
        "UPSStatus" : [
           NumberInt(1), 
           null, 
           NumberInt(1)
        ]
   }

这是我收集一条记录的样本。基本上PowerStatus,TempStatus和UPSStatus是arrayindex格式。在此字段中,数据仅存储1或空值。首先,我必须在个人档案中计算1,之后我必须计算PowerStatus,TempStatus和UPSStatus的平均值。我尝试以这种格式获得结果,如下所示

  {
  "result": [
    {
      "PowerStatus": 77,
      "TempStatus": 12,
      "UPSStatus": 11
    }
  ]
}

当我想要输出之后查询执行时像PowerStatus的集合平均值是77,TempStatus是12,UPSStatus是11.请建议我如何计算3个平均值?

1 个答案:

答案 0 :(得分:0)

您可以使用聚合框架。

由于我们没有您的数据集,我们无法查询结果 - 但请参阅下面提出的ypur问题解决方案;

db.dhsari.aggregate([{
            $unwind : "$PowerStatus"
        }, {
            $unwind : "$TempStatus"
        }, {
            $unwind : "$UPSStatus"
        }, {
            $group : {
                _id : null,
                PowerStatus : {
                    $avg : "$PowerStatus"
                },
                TempStatus : {
                    $avg : "$TempStatus"
                },
                UPSStatus : {
                    $avg : "$UPSStatus"
                },
            }
        }, {
            $project : {
                _id : 0,
                result : [{
                        "PowerStatus" : "$PowerStatus",
                        "TempStatus" : "$TempStatus",
                        "UPSStatus" : "$UPSStatus"
                    }
                ]

            }
        }

    ])