如何获得可用的 Mongoose 鉴别器列表?

How to get a list of available Mongoose Discriminators?

假设您有一个用户方案,用于创建名为用户的基本模型。然后对于用户角色,您使用 mongoose 鉴别器创建称为 Admin、Employee 和 Client 的继承模型。有没有办法以编程方式确定有多少 discriminations/inheritances/roles 用户模型可用,以及可用的名称?

我在代码方面的问题:

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

    });

  }
};

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

v4.11.13 以来,mongoose 模型有 model.discriminators,这是一个模型数组,以鉴别器模型的名称为关键字。

在你的情况下,如果你这样做 console.log(User.discriminators) 你将得到:

{
  Client: {
    ....
  },
  Employee: {
  }
}

据我所知,这是 not documented anywhere

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

我认为您想获取所有鉴别器的名称和值,至于您可以简单使用的名称

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 放在每个鉴别符下。