Теперь я хочу объединить схему для группировки по пользователям в массиве и разделить поле элементов по длине массива, чтобы создать среднее значение.
Это просто json data ->
[{"users": ["5ea40086fc4b145b489da93d","5e8cb9a4462e45178c4d3405"],"isBuilt": true, "_id": "5eadd43b30f97f342cf663fc", "items": 3, ...},
{"users": ["5e8cb9a4462e45178c4d3405"], "isBuilt": true, "_id": "5ead419081eec52258b67f70", "items": 5, ...}]
И после агрегирование с ->
Building.aggregate([
{
$match: {
updatedAt: {
$gte: startDate,
$lte: endDate
},
isBuilt: true
}
},
{
$unwind: "$users"
},
{
$group: {
_id: "$users",
items: {
$sum: '$items'
}
}
},
{
$project: {
user: '$_id',
items: 1,
_id: 0
}
}
])
Я получил это json ->
[{"items": 3, "user": "5ea40086fc4b145b489da93d"}, {"items": 8, "user": "5e8cb9a4462e45178c4d3405"}]
Как вы видите здесь, я получил сумму предметов . В исходных данных Users "5ea40086fc4b145b489da93d" and "5e8cb9a4462e45178c4d3405"
имеет 3 элемента, а user "5e8cb9a4462e45178c4d3405"
- 5 элементов. И после агрегирования они подсчитывают по сумме элементов, что user "5e8cb9a4462e45178c4d3405" -> 8 items, and user "5ea40086fc4b145b489da93d" -> 3 items
... Теперь я хочу сделать средние элементы для пользователей, например, если длина массива пользователей равна 2 или более, он разделит элементы и даст сумму .. и окончательный json будет выглядеть как ->
[{"items": 1.5, "user": "5ea40086fc4b145b489da93d"}, {"items": 6.5, "user": "5e8cb9a4462e45178c4d3405"}]
PS, если результат элемента не целочисленный, результат должен быть округлен до десяти