У меня есть две коллекции:
- Пользователи
- Загрузка
С каждой загрузкой связан User
, и мне нужно знать их детали при просмотре Upload
. Рекомендуется ли дублировать эти данные в записи Uploads или использовать populate () , чтобы получить эти данные из коллекции Users, на которую ссылается _id
?
ВАРИАНТ 1
var UploadSchema = new Schema({
_id: { type: Schema.ObjectId },
_user: { type: Schema.ObjectId, ref: 'users'},
title: { type: String },
});
ВАРИАНТ 2
var UploadSchema = new Schema({
_id: { type: Schema.ObjectId },
user: {
name: { type: String },
email: { type: String },
avatar: { type: String },
//...etc
},
title: { type: String },
});
При использовании «Варианта 2», если какие-либо данные в коллекции Users
изменятся, мне придется обновить их по всем связанным Upload
записям. С другой стороны, с помощью «Варианта 1» я могу просто расслабиться и позволить populate()
убедиться, что последние пользовательские данные всегда отображаются.
Значительны ли накладные расходы на использование populate()
? Какова лучшая практика в этом распространенном сценарии?