【问题标题】:How to calculate average on multiple field using MongoDB?如何使用 MongoDB 计算多个字段的平均值?
【发布时间】:2016-06-24 13:28:15
【问题描述】:

我在该集合 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 是数组索引格式。在此字段中,数据仅存储 1 或空值。首先,我必须在个人归档中计算 1,然后我必须计算 PowerStatus、TempStatus 和 UPSStatus 的平均值。我尝试以这种格式获得结果,如下所示

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

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

【问题讨论】:

  • 我认为这是不同的,首先我必须在 PowerStatus、TempStatus、UPSStatus 字段中计算 1,然后计算平均值。 @AliDehghani
  • 你的图片有点误导(至少对我来说)。请用相应的架构文本或示例文档替换它
  • 请看this使用robomongo按F4获取文本结果
  • @profesor79 我做了修改

标签: php mongodb mongodb-query


【解决方案1】:

您可以为此使用聚合框架。

由于我们没有您的数据集,我们无法检查结果 - 但请参阅下面针对 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"
                    }
                ]

            }
        }

    ])

【讨论】:

    猜你喜欢
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 2017-02-06
    • 1970-01-01
    • 2018-07-19
    • 2020-06-01
    • 1970-01-01
    相关资源
    最近更新 更多