MongoDB Log Aggregation для Chartjs - PullRequest
2 голосов
/ 17 апреля 2020

Коллекция состоит из данных журналов.

Журналы

[
    { "Module": "Admin",
        "UserEmail": "tony@dne.com",
        "Completed": "2020-02-29T01:21:24.128+00:00" },
    { "Module": "Admin",
        "UserEmail": "ricky@dne.com",
        "Completed": "2020-02-29T01:21:24.128+00:00" },
    { "Module": "Home",
        "UserEmail": "ricky@dne.com",
        "Completed": "2020-02-29T01:21:24.128+00:00" },
    { "Module": "Admin",
        "UserEmail": "santa@dne.com",
        "Completed": "2020-02-29T01:21:24.128+00:00" },
    { "Module": "Contact",
        "UserEmail": "tony@dne.com",
        "Completed": "2020-02-29T01:21:24.128+00:00" },
    { "Module": "Contact",
        "UserEmail": "santa@dne.com",
        "Completed": "2020-02-29T01:21:24.128+00:00" },
    { "Module": "Admin",
        "UserEmail": "ricky@dne.com",
        "Completed": "2020-02-29T01:21:24.128+00:00" },
    { "Module": "Home",
        "UserEmail": "tony@dne.com",
        "Completed": "2020-02-29T01:21:24.128+00:00" }
]

Ожидаемый результат

[
    {
        "Module": "Admin",
        "Count":4,
        "Logs": [
            {
                "UserEmail": "tony@dne.com",
                "Completed": "2020-02-29T01:21:24.128+00:00"
            },
            {
                "UserEmail": "ricky@dne.com",
                "Completed": "2020-02-29T01:21:24.128+00:00"
            },
            {
                "UserEmail": "santa@dne.com",
                "Completed": "2020-02-29T01:21:24.128+00:00"
            },
            {
                "UserEmail": "ricky@dne.com",
                "Completed": "2020-02-29T01:21:24.128+00:00"
            }
        ]
    },
    {
        "Module": "Home",
        "Count":2,
        "Logs": [
            {
                "UserEmail": "ricky@dne.com",
                "Completed": "2020-02-29T01:21:24.128+00:00"
            },
            {
                "UserEmail": "tony@dne.com",
                "Completed": "2020-02-29T01:21:24.128+00:00"
            }
        ]
    },
    {
        "Module": "Contact",
        "Count":2,
        "Logs": [
            {
                "UserEmail": "tony@dne.com",
                "Completed": "2020-02-29T01:21:24.128+00:00"
            },
            {
                "UserEmail": "santa@dne.com",
                "Completed": "2020-02-29T01:21:24.128+00:00"
            }
        ]
    }
]

необходимо иметь агрегацию в журналах, чтобы получить счетчик использования модулей и пользовательскую серию времени grpah для дополнительных Информация . ожидаемый результат будет использован для построения линейного графика на диаграмме js.

, где будет найден агрегатный конвейер, который будет построен для вышеуказанной проблемы в c# клиенте mongodb.

1 Ответ

1 голос
/ 17 апреля 2020

Вы можете использовать следующий конвейер агрегации, чтобы получить то, что вам нужно:

db.collection.aggregate([
  {
    $group: {
      _id: "$Module",
      Count: {
        $sum: 1
      },
      Logs: {
        $push: {
          UserEmail: "$UserEmail",
          "Completed": "$Completed"
        }
      }
    }
  },
  {
    $project: {
      _id: 0,
      Module: "$_id",
      Count: 1,
      Logs: 1
    }
  }
])

Этап $ project здесь только для переименования _id в Module, вы можете удалить его, если он не имеет значения.

Вы можете проверить это здесь

...