Mongoose Different Model.Discriminator () Схемы создают дубликаты ключевых ошибок - PullRequest
0 голосов
/ 27 июня 2018

Я получаю ошибку дублирующегося ключа при попытке создать экземпляр Дискриминатора Admin BaseSchema User.

Ошибка относится к полю с именем customerId, которое установлено как unique: true на другом Дискриминаторе с именем Customer, также BaseSchema 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 устанавливает все свойства каждого Дискриминатора, добавляющего поля в Коллекцию пользователей, как «нулевые», даже если они не являются частью Дискриминатора, который создается.

Проблема в том, что я не могу просто придумать поддельные customerIds, так как они приходят из внешнего источника и на них ссылаются вне моего приложения.

Заранее спасибо.

С уважением
- Бен

...