У меня есть три коллекции:
Like
с полем postItem: { type: Schema.Types.ObjectId, ref: 'Post' }
и полем type: String
, Post
с полем author: { type: Schema.Types.ObjectId, ref: 'User' }
, - и
User
.
Я хочу подсчитать, сколько лайков получил каждый type
пользователь с данным ID. Как мне это сделать в MongoDB / Mon goose?
Я научился подсчитывать, сколько лайков каждого типа у каждого Post
( здесь - мой вопрос), но я не уверен, что смогу обобщить это на агрегации по нескольким коллекциям (объединяя Like
и Post
, поскольку мне нужно фильтровать лайки по Post
s author
) даже после прочтения документации на структура агрегации. В частности, я попытался сделать
Like.aggregate([
{ $lookup: { from: 'Like', localField: 'postItem', foreignField: '_id', as: 'matchingPost' } },
{ $match: { 'matchingPost.author': mongoose.Types.ObjectId(req.user.userId) } },
{ $group: { _id: '$type', count: { $sum: 1 } } }
]);
, но это возвращает пустой набор.
Так как мне это сделать в MongoDB и Mon goose?