@fedot1325

Как правильно посчитать просмотры и т.д. агрегацией?

Всем привет.
Собственно имеется очень много пользователей примерно такого вида:
_id: 123,
name: 'ivan',
...,
views: [{post_id: 456, timestamp: Date()}, {post_id: 789, timestamp: Date()}, ...],
likes: [{post_id: 789, timestamp: Date()}],
dislikes: [{post_id: 456, timestamp: Date()}]

На странице, допустим, 10 статей, я хочу к каждой статье вывести общее кол-во уникальных просмотров, лайков, дизлайков.
Через aggregation match по $in post_id и unwind views я смог получить одним запросом уникальное кол-во просмотров для каждого поста на странице, однако дальше я зашел в тупик, добавить в этот набор данных лайки и дизлайки у меня не получилось.
Как получить просмотры/лайки/дизлайки для каждого поста на странице и сделать это максимально "энергоэффективно" и быстро?

upd:
таким образом я могу посчитать просмотры у интересующих меня постов.
db.users.aggregate( [
   { $match: { 'views.post_id': { $in: [1104, 1105] } } },
   { $project : { '_id': 0, 'views.post_id': 1, 'likes.post_id': 1, 'dislikes.post_id': 1 } },
   { $unwind: '$views' },
   { $match: { 'views.post_id': { $in: [1104, 1105] } } },
   { $group: { 
   	_id: '$views.post_id',
   	views: { "$sum": 1 }
   } }
] );
  • Вопрос задан
  • 169 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Nc_Soft
Добавьте эти каунтеры к самому посту
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы