猫鼬不同的Model.Discriminator()模式会创建重复的键错误

时间:2018-06-27 15:40:46

标签: node.js mongodb mongoose discriminator

当尝试创建BaseSchema Admin的鉴别器User的实例时,出现重复键错误。

错误与名为customerId的字段有关,该字段在名为unique: true另一个鉴别器(也是BaseSchema Customer的)上设置为User

但是该字段既不是User也不是Admin的一部分。 Customer

的仅一部分

UserSchema

const UserSchema = new Schema({
    email: { type: String, required: true, unique: true },
    firstname: { type: String, required: true },
    lastname: { type: String, required: true },
    role: { type: String, required: true },     
    apikey: { type: String }
})

CustomerSchema

const CustomerSchema = new Schema({
    customerId: { type: String, required: true, unique: true },
    mobile: { type: String, unique: true },    
    birthdate: { type: Date, required: true },
    password: { type: String }, 
    role: { type: String, default: 'customer' },        
    phone: { type: String },
    isActive: { type: Boolean, default: false },        
    events: [ { type: Schema.Types.ObjectId, ref: 'Events' } ]
})

AdminSchema

const AdminSchema = new Schema({
    email: { type: String, required: true, unique: true },

    firstname: { type: String, required: true },
    lastname: { type: String, required: true },
    password: { type: String }, 
    role: { type: String, required: true, default: 'admin' },

    apikey: { type: String },
})

当我尝试创建此架构的一个实例时,出现以下错误:

E11000 duplicate key error collection: database.users index: customerId_1 dup key: { : null }

因此,显然,MongoDB将添加到用户集合的每个Discriminator添加字段的所有属性设置为“ null”,即使它们不是要实例化的Discriminator的一部分。

问题是,我不能仅仅提出伪造的customerIds,因为它们来自外部,并且在我的应用程序之外被引用。

谢谢。

最诚挚的问候
-本

0 个答案:

没有答案