#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"
]
}
}
}
]
}
}
}
])
Комментарии:
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. Используйте только вышеуказанные данные