Как получить список доступных мангустов-Дискриминаторов?

учитывая ситуацию, когда у вас есть схема пользователя, которую вы используете для создания базовой модели под названием 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 под каждый дискриминатор.