在某种情况下,您有一个用于创建名为User的基本模型的用户方案。然后对于用户角色,使用mongoose discriminators创建名为Admin,Employee和Client的继承模型。有没有办法以编程方式确定可用的用户模型有多少歧视/继承/角色,以及可用的名称?
我在代码方面的问题:
档案:models / user.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 };
文件:controllers / 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})
});
}
};
我希望我能表达我想做的事情。也欢迎其他方法。
答案 0 :(得分:5)
自mergesort implementation起,猫鼬模型具有model.discriminators
,这是一个模型数组,键入鉴别器模型的名称。
就您而言,如果您console.log(User.discriminators)
会得到:
{
Client: {
....
},
Employee: {
}
}
据我所知,这是v4.11.13。
在not documented anywhere中的第158行是创建位置。
答案 1 :(得分:0)
我认为您希望获取所有标识符的名称和值,就像您可以简单使用的名称一样
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放在每个标识符下。