У меня есть такая схема видео:
const VideoSchema = new mongoose.Schema({
caption: {
type: String,
trim: true,
maxlength: 512,
required: true,
},
owner: {
type: mongoose.Schema.ObjectId,
ref: 'User',
required: true,
},
// some more fields
comments: [{
type: mongoose.Schema.ObjectId,
ref: 'Comment',
}],
commentsCount: {
type: Number,
required: true,
default: 0,
},
}, { timestamps: true });
и простая схема комментариев, подобная этой:
const CommentSchema = new mongoose.Schema({
text: {
type: String,
required: true,
maxLength: 512,
},
owner: {
type: mongoose.Schema.ObjectId,
ref: 'User',
required: true,
},
videoId: {
type: mongoose.Schema.ObjectId,
ref: 'Video',
required: true,
index: true,
},
}, { timestamps: true });
, и с такими схемами я могу выполнять любые видызапроса find на мою коллекцию видео и заполните его комментариями:
Video.find({ owner: someUserId }).populate({ path: 'comments' });
Мой вопрос: насколько необходимо хранить идентификаторы комментариев внутри коллекции видео?учитывая, что я проиндексировал поле videoId в своей схеме комментариев, насколько плохо (если говорить о производительности) было бы избавиться от этих идентификаторов комментариев и их количества и использовать агрегацию $ lookup для поиска комментариев к видео, например:
Video.aggregate([
{
$match: {
owner: someUserId,
},
},
{
$lookup: {
from: 'comments',
localField: '_id',
foreignField: 'videoId',
as: 'comments',
}
}
])
Насколько они отличаются с точки зрения производительности?