基于属性的动态杂种模式



i具有以下用户架构(在其中合并了不同用户类型的所有不同属性(:

var UserSchema = new mongoose.Schema({
  status: String,
  firstName: String,
  lastName: String,
  address: Object,
  email: {type: String, lowercase: true, unique: true, required: [true, "can't be blank"], match: [/S+@S+.S+/, 'is invalid'], index: true},
  organization: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Organization' }],
  phone: {type: Number, unique: true, required: true, required: [true, "can't be blank"]}, 
  role: String, 
  hash: String,
  salt: String,
  deliverySchedule:  [{type: String, required: true}]
}

" common"架构(所有用户类型共享的共享(:

var UserSchema = new mongoose.Schema({
  status: String,
  firstName: String,
  lastName: String,
  email: {type: String, lowercase: true, unique: true, required: [true, "can't be blank"], match: [/S+@S+.S+/, 'is invalid'], index: true},
  phone: {type: Number, unique: true, required: true, required: [true, "can't be blank"]}, 
  role: String, 
  hash: String,
  salt: String
}

角色="客户":

  address: [{type: Object, required: true}]

角色="递送人":

      deliverySchedule:  [{type: String, required: true}]
      organization: [{ type: mongoose.Schema.Types.ObjectId, required: true, 
ref: 'Organization' }],

角色="卖家":

      organization: [{ type: mongoose.Schema.Types.ObjectId, required: true, 
ref: 'Organization' }],

我想根据用户的角色添加(并在可能的情况下(将某些字段添加到"常见"架构中。但是,我想将它们存储在同一系列中。

如何将方法添加到我的models/Users.js中,以基于" user.role"

将属性添加到架构中

对每个角色依赖字段进行 require可选。

var UserSchema = new mongoose.Schema({
  status: String,
  firstName: String,
  lastName: String,
  email: {type: String, lowercase: true, unique: true, required: [true, "can't be blank"], match: [/S+@S+.S+/, 'is invalid'], index: true},
  phone: {type: Number, unique: true, required: true, required: [true, "can't be blank"]}, 
  role: {type: String, enum: ['Customer', 'DeliveryMan', 'Seller'], required: true},
  address: {type: [Object],  required: isRequired("address")},
  deliverySchedule: {type: [String], required: isRequired("deliverySchedule")},
  organization: { type: [mongoose.Schema.Types.ObjectId], ref: 'Organization', required: isRequired("organization")},
  hash: String,
  salt: String
});
function isRequired(field){
    return function(){
        if(field == "address"){
            return this.role === "Customer"
        }
        else if(field == "deliverySchedule"){
            return this.role === "DeliveryMan"
        }
        else if(field == "organization"){
            return this.role === "Seller" || this.role === "DeliveryMan"
        }
    }
};

最新更新