Войти Регистрация
Data base

252. Топ-3 семейства угроз по числу заражённых устройств

Средняя

Защита на устройствах присылает событие на каждое срабатывание. Один заражённый ноутбук может прислать сотню событий одного семейства за день, поэтому отчёт аналитиков считает не события, а устройства.

В detections — device_id, семейство family и время ts строкой ISO 8601 в UTC. Нужна неделя с понедельника 12 по воскресенье 18 октября 2026 года включительно.

Верните три семейства с наибольшим числом разных устройств: family и devices, по убыванию devices, при равенстве — по family по алфавиту.

В работе: Отчёты по угрозам, охват рекламной кампании, число пострадавших клиентов от инцидента.

MongoDB · MongoDB 8.0.20

Коллекции

detections — одно срабатывание — один документ

ПолеТипЧто значит
device_idstringустройство
familystringсемейство угрозы
tsstringISO 8601, UTC

Пример: документы

detections

[
 {
  "device_id": "pc-1",
  "family": "Trojan.Agent",
  "ts": "2026-10-12T08:00:00Z"
 },
 {
  "device_id": "pc-1",
  "family": "Trojan.Agent",
  "ts": "2026-10-12T08:05:00Z"
 },
 {
  "device_id": "pc-1",
  "family": "Trojan.Agent",
  "ts": "2026-10-13T10:00:00Z"
 },
 {
  "device_id": "pc-1",
  "family": "Trojan.Agent",
  "ts": "2026-10-14T11:00:00Z"
 },
 {
  "device_id": "pc-2",
  "family": "Miner.Linux",
  "ts": "2026-10-13T12:00:00Z"
 },
 {
  "device_id": "pc-3",
  "family": "Miner.Linux",
  "ts": "2026-10-15T09:00:00Z"
 },
 {
  "device_id": "pc-4",
  "family": "Miner.Linux",
  "ts": "2026-10-16T09:00:00Z"
 },
 {
  "device_id": "pc-2",
  "family": "Phish.Html",
  "ts": "2026-10-14T07:00:00Z"
 },
 {
  "device_id": "pc-5",
  "family": "Phish.Html",
  "ts": "2026-10-17T07:00:00Z"
 },
 {
  "device_id": "pc-6",
  "family": "Worm.Usb",
  "ts": "2026-10-11T23:59:59Z"
 },
 {
  "device_id": "pc-7",
  "family": "Worm.Usb",
  "ts": "2026-10-11T22:00:00Z"
 },
 {
  "device_id": "pc-8",
  "family": "Worm.Usb",
  "ts": "2026-10-11T21:00:00Z"
 }
]

Ожидаемый ответ

[
 {
  "devices": 3,
  "family": "Miner.Linux"
 },
 {
  "devices": 2,
  "family": "Phish.Html"
 },
 {
  "devices": 1,
  "family": "Trojan.Agent"
 }
]
Как проверяем Запрос — JSON: имя коллекции и стадии aggregate, как в db.коллекция.aggregate([...]). Выполняем его в браузере движком агрегаций на 5 наборах документов: пример выше и скрытые — с пропущенными полями, null и пустыми коллекциями. Порядок документов важен, порядок полей внутри документа — нет. $out и $merge запрещены.
{"collection": "detections", "pipeline": [ … ]}
двойной $groupуникальные значенияграницы дат строками$limit

Источник: наша задача на данных Лаборатории Касперского: срабатывания защиты на устройствах. Условие пересказано своими словами.