Publion
@Publion

Как посчитать кол-во результатов с определенным значением в mongo (aggregation)?

Разрабатываю систему рейтинга по игре мафия.

Объекты в БД 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
  • Вопрос задан
  • 19 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы