mongoose:名为““的鉴别器已存在

qzlgjiam  于 2023-10-19  发布在  Go
关注(0)|答案(3)|浏览(102)

我使用mongoose在rest API中与mongoDB交互,当使用判别器时,我得到了这个错误:
名称为“serviceMember”的鉴别器已存在
知道这段代码一切都很好:

const serviceManagerSchema = new Schema({
    serviceId : {
    	type : Schema.Types.ObjectId,
    	ref : 'service'
    },
    serviceMembers : [{
    	type : Schema.Types.ObjectId,
    	ref : 'serviceMember'
    }] 
},options)

const ServiceManager = Employee.discriminator('serviceManager',serviceManagerSchema)

但这不管用

const serviceMemberSchema = new Schema({
 
 },options)

const ServiceMember = Employee.discriminator('serviceMember',serviceMemberSchema)

module.exports = ServiceMember

我试着用另一个我肯定从未使用过的名称替换“serviceMember”名称,但仍然是同样的错误。
请帮帮我,先谢谢你

svdrlsy4

svdrlsy41#

我知道这个问题有蜘蛛网,但如果有人来这里寻找这个问题的解决方案,这里是我如何解决它的。在我的例子中,我得到这个错误是由于使用Mongoose和Next.js -每次Next热重新加载我的模型模块(在我的例子中,基本模型被称为“User”),所有的判别器都会冲突。
为了解决这个问题,我不得不删除一个用户模型(因为Mongoose为每个用户创建了一个完整的模型),然后从用户模型中删除用户模型:

// Patient handler
if (mongoose.modelNames().includes('patient')) {
  log.trace('Deleting patient model');
  mongoose.deleteModel('patient');
}

if (User.discriminators && 'patient' in User.discriminators) {
  log.trace('Deleting patient discriminator');
  delete User.discriminators.patient;
}

const Patient = User.discriminator(
  'patient',
  new mongoose.Schema(
    {
      healthCard: { type: String, unique: true },
      homePhone: { type: String },
      birthDate: { type: Date, required: true },
    },
    options
  )
);
nkkqxpd9

nkkqxpd92#

在使用热重载或类似功能的开发环境中,model/discriminator的示例已经可以被缓存。由于mongoose不允许同名的模型,因此会出现此错误。可以先检查mongoose.models变量,看看内存中是否有基类的示例。然后,如果它不存在,您可以创建一个示例:

const Base = mongoose.models.Base || mongoose.model('Base', Schema);

同样的原则也适用于该系统:

const Inherited = 
    mongoose.models.Base.discriminators.Inherited || 
    Base.discriminator('Inherited', InheritedSchema)

这里的关键是使用||操作符,仅在不存在同名模型时才创建模型。

sr4lhrrt

sr4lhrrt3#

const ServiceManager = Employee.discriminators != undefined ?  Employee.discriminators['serviceManager'] : Employee.discriminator('serviceManager',serviceManagerSchema)

相关问题