Получить количество полей из сгруппированных строк - PullRequest
1 голос
/ 08 мая 2020

Данные:

[
  { created_at: "2020-05-08T18:46:08.020Z", view: true, cta: false },
  { created_at: "2020-05-08T19:00:00.020Z", view: true, cta: true },
  { created_at: "2020-05-08T19:30:45.020Z", view: true, cta: false },
  { created_at: "2020-05-08T19:55:50.020Z", view: true, cta: true }
]

Когда я группирую данные по часовому интервалу с помощью created_at, я получаю количество уникальных created_at просто отлично.

  $group: {
    $hour: { hour: '$created_at' },
    count: { $sum: 1 }

  }

Результат:

   hour: 18, count: 1,
   hour: 19, count: 3

Теперь, как мне также включить количество полей cta и view, если значение поля истинно. Я хотел бы получить такой результат:

    [{ hour: 18, ctaCount: 0, viewCount: 1 }],
    [{ hour: 19, ctaCount: 2, viewCount: 3 }]

Попытка группировки с несколькими операторами группы не работает должным образом.

1 Ответ

1 голос
/ 08 мая 2020

Вы можете использовать $ cond и напрямую ссылаться на поле cta, так как оно bool:

db.collection.aggregate([
    {
        $group: {
            _id: { hour: { $hour: "$created_at" } },
            count: { $sum: 1 },
            ctaCount: { $sum: { $cond: [ "$cta", 1, 0 ] } }
        }
    }
])

Mon go Playground

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...