Mongoose. Как в одной коллекции отобразить количество совпадений из другой коллекции
Друзья, добрый день!
Изучаю MongoDB и сейчас столкнулся с такой проблемой:
Есть БД в которой хранятся отдельно посты и отдельно комментарии.
Схема постов:
const PostSchema = new mongoose.Schema(
{
title: {
type: String,
required: true,
},
text: {
type: String,
required: true,
},
tags: {
type: Array,
default: [],
},
viewsCount: {
type: Number,
default: 0,
},
commentsCount: {
// Счетчик совпадений по _id поста.
},
imageUrl: String,
user: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true,
},
},
{
timestamps: true,
}
);
export default mongoose.model("Post", PostSchema);
схема комментариев:
const CommentSchema = new mongoose.Schema(
{
text: {
type: String,
required: true,
},
user: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true,
},
post: {
type: mongoose.Schema.Types.ObjectId,
ref: "Post",
required: true,
},
},
{
timestamps: true,
}
);
Мне нужно чтобы в модели поста в поле commentsCount отображать количество комментариев с его _id.
Ответы (1 шт):
Автор решения: Dmitriy Grape
→ Ссылка
Адекватно за один запрос — никак. Даже агрегацией. Комментарии к посту нужно получать отдельным запросом на сервер.
const response = {
comments: await CommentModel.find({ post: new ObjectId(postId) }).skip(offset).limit(limit).exec(),
count: await CommentModel.countDocuments({ post: new ObjectId(postId) }).exec()
}
А как адекватно прикрепить количество комментариев к посту при запросе всех постов, я, честно говоря, не знаю. Ведь вам придётся делать $lookUp для всех комментариев каждого из постов, коих (комментариев) может быть очень много.