запрос для нахождения среднего среднего, хранящегося в mongodb, с использованием подсчета каждого среднего

#mongodb #mongodb-query #average

#mongodb #mongodb-запрос #среднее

Вопрос:

У нас есть такие данные, как

 {
    "_id" : ObjectId("64326493749326499446"),
    "dId" : "d_155",
    "pId" : "5f4cb595cff47e0001b20882",
    "sId" : "825",
    "paramName" : "Utility_Air_Flow",
 "avg" : 488270.454545455,
            "count" : NumberLong(220),
    "date" : ISODate("2020-09-03T18:30:00.000Z"),
    "dataPerHour" : {
        "19" : {
            "min" : 8399.0,
            "max" : 995990.0,
            "avg" : 488270.454545455,
            "count" : NumberLong(220),
            "values" : [ 
                {
                    "paramValue" : "90235",
                    "time" : ISODate("2020-09-04T13:37:07.000Z")
                }, 
                {
                    "paramValue" : "272297",
                    "time" : ISODate("2020-09-04T13:37:14.000Z")
                }
            ]
        },
        "20" : {
            "min" : 8399.0,
            "max" : 995990.0,
            "avg" : 488270.454545455,
            "count" : NumberLong(220),
            "values" : [ 
                {
                    "paramValue" : "90235",
                    "time" : ISODate("2020-09-04T13:37:07.000Z")
                }, 
                {
                    "paramValue" : "272297",
                    "time" : ISODate("2020-09-04T13:37:14.000Z")
                }
            ]
        }
    },
    "_class" : "org.nec.iotplatform.entities.RawData"
}

  

и нам нужно найти среднее значение всех средних уже сохраненных средних значений внутри dataPerHour.

Нам нужно найти среднее значение средних значений в соответствии с формулами:

(среднее значение 1 count1) (среднее значение 2 count2) (среднее значение 3 * count3)/(count1 count2 count3)

Ответ №1:

Вы можете использовать следующий запрос:

 db.collection.aggregate([
  {
    $project: {
      dataPerHour: {
        $objectToArray: "$dataPerHour"
      }
    }
  },
  {
    $project: {
      "average": {
        "$divide": [
          {
            $reduce: {
              input: "$dataPerHour",
              initialValue: 0,
              in: {
                "$add": [
                  "$$value",
                  {
                    "$multiply": [
                      "$$this.v.count",
                      "$$this.v.avg"
                    ]
                  }
                ]
              }
            }
          },
          {
            $reduce: {
              input: "$dataPerHour",
              initialValue: 0,
              in: {
                "$add": [
                  "$$value",
                  "$$this.v.count"
                ]
              }
            }
          }
        ]
      }
    }
  }
])
  

Игровая площадка MongoDB

Комментарии:

1. Большое вам спасибо…… Мне также нужно вычислить среднее значение среднего значения, лежащее в строке № 7, используя те же формулы

2. не включайте …… используйте только строку no7 average и count для вычисления ….. предположим, что в базе данных есть несколько json

3. @PRAMODKUMAR Вы имели в виду, что вы должны включать среднее значение, лежащее в строке № 7, и считать вместе с данными в dataPerHour, используя те же формулы? Затем посмотрите обновленный запрос: mongoplayground.net/p/R4-EsH3AKQu

4. «_id»: ObjectId («64326493749326499446»), «dId»: «d_155», «pId»: «5f4cb595cff47e0001b20882», «sId»: «825», «ParamName»: «Utility_Air_Flow», «avg»: 488270.454545455, «count» : NumberLong(220), «дата» : ISODate(«2020-09-03T18:30:00.000Z»),

5. Используйте только вышеуказанные данные