Всем привет.
Собственно имеется очень много пользователей примерно такого вида:
_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 }
} }
] );