То, что вы хотели бы сделать, - это начать с наименьшего набора свойств, который вам нужен, который разделяется между 3 типами моделей (guest, user, admin) и который будет вашей базовой схемой.
Затем, используя дескрипторы Mongoose (наследование схемы mongoose), вы унаследуете его и украсите большим количеством свойств, которые вы будете моделировать на уровне.
Например, ваш guest
может неиметь свойство role
, так как он гость.Поэтому вы можете начать с базовой модели guest
и добавить поверх нее другие реквизиты, необходимые для пользователя / администратора.
Пример:
var options = {discriminatorKey: 'type'};
var guestSchema = new mongoose.Schema({
date: { type: Date, default: Date.now },
username: { type: string, default: 'guest_' + Date.now },
}, options);
var Guest = mongoose.model('Guest', guestSchema);
var User = Guest.discriminator('User',
new mongoose.Schema({password: String}, options));
// Now you have Guest as base model and User with decorated 'password' field
Вы можете прочитать Официальная документация по этому вопросу здесь
В Интернете также есть множество статей на эту тему.