Необходимо получить среднее значение всех полей внедренного объекта, но у каждого объекта есть свой встроенный объект. Итак, во-первых, нужно получить среднее значение внутреннего вложенного объекта.
Попробовал несколько вариантов. Но не получая желаемого результата.
[{
$project: {
vals: {
$objectToArray: "$values"
}
}
}, {
$unwind: {
path: "$vals",
}
}, {
$project: {
valInner: {
$objectToArray: "$vals.v"
}
}
}, {
$group: {
_id: "$valInner.k",
avg: {
$avg: "$valInner.v"
}
}
}]
JSON выглядит так:
{
"_id": {
"$oid": "5cf8132d528a1809fc6bad64"
},
"values": {
"0": {
"0": 0,
"1": 0,
"2": 0,
"3": 0,
"4": 10,
"5": 20,
"6": 0,
"7": 10,
"8": 0,
"9": 0,
"10": 0,
"11": 0,
...
...
...
"57": 0,
"58": 0,
"59": 0
},
"1": {},
"2": {},
...
"60": {}
},
"event_hour": {
"$date": "2019-06-05T19:16:02.524+0000"
}
}
Ожидаемый результат после агрегации должен быть:
{
"_id": {
"$oid": "5cf8132d528a1809fc6bad64"
},
"values": avgValue,
"event_hour": {
"$date": "2019-06-05T19:16:02.524+0000"
}
}