我使用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”名称,但仍然是同样的错误。
请帮帮我,先谢谢你
3条答案
按热度按时间svdrlsy41#
我知道这个问题有蜘蛛网,但如果有人来这里寻找这个问题的解决方案,这里是我如何解决它的。在我的例子中,我得到这个错误是由于使用Mongoose和Next.js -每次Next热重新加载我的模型模块(在我的例子中,基本模型被称为“User”),所有的判别器都会冲突。
为了解决这个问题,我不得不删除一个用户模型(因为Mongoose为每个用户创建了一个完整的模型),然后从用户模型中删除用户模型:
nkkqxpd92#
在使用热重载或类似功能的开发环境中,
model
/discriminator
的示例已经可以被缓存。由于mongoose
不允许同名的模型,因此会出现此错误。可以先检查mongoose.models
变量,看看内存中是否有基类的示例。然后,如果它不存在,您可以创建一个示例:同样的原则也适用于该系统:
这里的关键是使用
||
操作符,仅在不存在同名模型时才创建模型。sr4lhrrt3#