Разрабатываю систему рейтинга по игре мафия.
Объекты в БД mongo имеют подобный вид:
{
"_id": "606e62f039d51433548ed934",
"date": "2021-04-08T01:55:03.759Z",
"bmove": [1,4,9],
"result": "mafia",
"fkill": 5,
"players": [
{
"slot": 1,
"nickname": {
"id":"605ca4d15bf2d053f08041e1",
"name":"player1"},
"role": "mafia",
"point": 1,
"extra": 0.3,
"fouls": 3
},
{
"slot": 2,
"nickname": {
"id":"605ca4d15bf2d053f08041e2",
"name":"player2"},
"role": "civilian",
"point": 0,
"extra": 0,
"fouls": 2
},
...
]
}
Агрегация данных выглядит следующим образом:
const allRatings = await Game.aggregate([
{$unwind: "$players"},
{$unwind: "$players.nickname"},
{$group: {
_id: "$players.nickname.name",
allgames: {$sum:1 },
totalpoints: { $sum: "$players.point" },
totalextra: { $sum: "$players.extra" },
totalfouls: { $sum: "$players.fouls" },
total: { $sum: { $sum: ["$players.extra", "$players.point"] } },
}},
{$sort: {total:-1}},
])
Все числовые значения я вывожу и преобразую как мне надо.
Требуются значения, когда игрок сыграл за определенную роль и кол-во побед за определенную роль.
Вопрос таков: как посчитать суммарное кол-во результатов для отдельного игрока,
когда "role": "mafia" и когда "role": "mafia" при "point": 1