如何获得可用的Mongoose Discriminators列表?

Mil*_*azi 9 mongoose node.js express discriminator mongoose-schema

在某种情况下,您有一个用于创建名为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 };
Run Code Online (Sandbox Code Playgroud)

文件: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})      

    });

  }
};
Run Code Online (Sandbox Code Playgroud)

我希望我能表达我想做的事情.也欢迎其他方法.

Lon*_*Rob 6

v4.11.13开始,mongoose模型具有model.discriminators一个模型数组,键入了鉴别器模型的名称.

如果你这样做,console.log(User.discriminators)你会得到:

{
  Client: {
    ....
  },
  Employee: {
  }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,这在任何地方没有记录.

第158行lib.helpers.model.discriminators.js是创建它的地方.

  • 我认为 mongoose API 文档中提到了它,但不是在通常的地方:)。http://mongoosejs.com/docs/api.html#model_Model-discriminators (2认同)