Я не уверен, что это лучший способ настроить это в MongoDB.
У меня есть две коллекции User
и Skill
. В сборнике для Skill
есть список навыков, которыми должен обладать каждый пользователь.
var SkillSchema = new Schema({
name: { type: String, required: true, trim: true },
category: { type: String, required: true, trim: true }
});
mongoose.model('Skill', SkillSchema);
var UserSchema = new Schema({
_id: { type: String, required: true, trim: true },
first_name: { type: String, required: true, trim: true },
last_name: { type: String, required: true, trim: true },
email_address: { type: String, required: true, trim: true },
skills: [{
skill: { type: ObjectId, ref: 'Skill' },
count: { type: Number, default: 0 },
last_performed: { type: Date }
}]
});
mongoose.model('User', UserSchema);
То, что я пытаюсь сделать, это иметь список навыков, и у каждого пользователя есть свойство count
, которое показывает, сколько раз они выполнили навык, и свойство last_performed
, в котором указана дата последнего выполнения.
Моя проблема в том, что я хочу, чтобы список навыков был одинаковым для каждого пользователя, но я могу обновлять их свойства count
и last_performed
уникально для каждого пользователя.
То, как я это получил в настоящее время, ссылается на идентификатор навыка, а затем имеет количество/дату в пользовательской схеме. Проблема в том, что если я добавлю еще один навык в схему навыков, массив навыков пользователя не будет обновлен новым навыком. Я полагал, что обновление каждого пользователя каждый раз, когда я добавляю/удаляю навык, чтобы отразить новый список навыков, не было бы оптимальным способом сделать это.
Можете ли вы синхронизировать массив навыков пользователя, чтобы он соответствовал схеме навыков?
Было бы лучше просто добавить количество/дату каждого пользователя напрямую в схему навыков? Единственная проблема заключается в том, что если есть тысячи пользователей, будут ли проблемы с производительностью, и будет ли достаточно просто сортировать навыки по количеству/дате для каждого пользователя и запрашивать навыки пользователя индивидуально, не возвращая количество для каждого пользователь?
Привет, Бен