MongoDB повторно использует коллекцию для каждого пользователя

Я не уверен, что это лучший способ настроить это в 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 уникально для каждого пользователя.

То, как я это получил в настоящее время, ссылается на идентификатор навыка, а затем имеет количество/дату в пользовательской схеме. Проблема в том, что если я добавлю еще один навык в схему навыков, массив навыков пользователя не будет обновлен новым навыком. Я полагал, что обновление каждого пользователя каждый раз, когда я добавляю/удаляю навык, чтобы отразить новый список навыков, не было бы оптимальным способом сделать это.

Можете ли вы синхронизировать массив навыков пользователя, чтобы он соответствовал схеме навыков?

Было бы лучше просто добавить количество/дату каждого пользователя напрямую в схему навыков? Единственная проблема заключается в том, что если есть тысячи пользователей, будут ли проблемы с производительностью, и будет ли достаточно просто сортировать навыки по количеству/дате для каждого пользователя и запрашивать навыки пользователя индивидуально, не возвращая количество для каждого пользователь?

Привет, Бен


person Ben    schedule 06.03.2017    source источник


Ответы (1)


skills : [{ type: ObjectId, ref: 'Skill' }]. Просто вставьте идентификаторы в массив, если вы хотите добавить навыки при сохранении или обновлении.

вы можете заполнить массив навыков, и вы можете подсчитать массив навыков. Это даст вам счет.

Если у вас есть last_performed в модели навыков. то вы получите к нему доступ после заполнения

person jack blank    schedule 06.03.2017
comment
Свойство count подсчитывает количество раз, когда пользователь выполнял навык, а не количество навыков. Извините за путаницу. Свойства count и last_performed также уникальны для каждого пользователя. - person Ben; 06.03.2017
comment
Возможно, вы обновите счет в навыках, и вы все равно сможете заполнить его. Я имею в виду поместить счет в схему навыков. Также, возможно, взгляните на виртуалы. - person jack blank; 06.03.2017
comment
Спасибо, это кажется самым простым способом сделать это. Я не был уверен, что хранение тысяч значений count и last_performed в каждом навыке (по одному разу для каждого пользователя) повлияет на производительность при запросе или нет. - person Ben; 06.03.2017