Как получить список доступных мангустов-Дискриминаторов?
учитывая ситуацию, когда у вас есть схема пользователя, которую вы используете для создания базовой модели под названием User. И затем для ролей пользователей вы используете дискриминаторы мангуста для создания унаследованных моделей под названием Admin, Employee и Client. Есть ли способ программно определить, сколько различий / наследований / ролей модели пользователя доступны, а также доступные имена?
мой вопрос с точки зрения кода:
: модели/пользователя.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var options = {discriminatorKey: 'role'};
var userSchema = mongoose.Schema({
name: String,
email: String,
password: String,
},options);
var User = mongoose.model('User', userSchema);
var Client = User.discriminator("Client", mongoose.Schema({
Address : String,
Tax_identification : String,
Phone_number : String,
Internal_Remarks : String,
CRM_status : String,
Recent_contact : String,
}));
var Employee = User.discriminator("Employee",mongoose.Schema({
Staff_Id: String,
}));
module.exports = {User: User, Client: Client, Employee: Employee };
: контроллеры/usersController.js
var User = require('../models/user.js').User;
module.exports = {
registerRoutes: function(app){
app.get('user/create',this.userCreateCallback)
},
userCreateCallback: function(req,res){
//Get Available User Roles - The function below doesn't exist,
//Just what I hypothetically want to achieve:
User.geAvailableDiscriminators(function(err,roles){
res.render('user/create',{roles:roles})
});
}
};
Я надеюсь, мне удалось выразить то, что я хочу сделать. Приветствуются также альтернативные подходы.
2 ответов
С В4.11.13, модель Мангуст model.discriminators
который представляет собой массив моделей, набранных на имя модели дискриминатора.
в вашем случае, если вы делаете console.log(User.discriminators)
вы получите:
{
Client: {
....
},
Employee: {
}
}
насколько я вижу, это нигде не задокументирован.
строка 158 в lib.helpers.model.discriminators.js
где это создается.
Я думаю, вы хотите получить имена и значения всех дискриминаторов, как для имен, которые вы можете просто использовать
User.discriminators
но для поиска значений вы можете использовать это
return Promise.all(Object.keys(discriminators).map(i =>
discriminators[i].find({ userId: this._id }))
).then(promiseResults =>
promiseResults.reduce((arr, el) => arr.concat(el), [])
);
для этого вам нужно поместить userId под каждый дискриминатор.