Mongoose报错'Symbol(mongoose#Document#scope)'未定义如何解决
错误触发原因
你在productSchema中自定义了名为collection的字段,而collection是Mongoose Schema的内置保留路径名:Mongoose文档实例本身就存在默认的collection属性,指向该模型对应的MongoDB集合实例,自定义同名字段会和Mongoose内部逻辑产生冲突。
启动时的警告已经明确提示了该风险,冲突后编译模型的过程中Mongoose内部访问属性时上下文异常,最终抛出Cannot read property 'Symbol(mongoose#Document#scope)' of undefined类型错误。
修复方案
- 【推荐】重命名冲突字段:将自定义的
collection字段改为其他非保留名,例如改成productCollection、collectionId都可以,仅需同步业务代码中用到该字段的地方即可,无后续兼容性问题:
// 修改productSchema中的对应字段定义 const productSchema = mongoose.Schema({ // 其他原有字段保持不变 productCollection: { type: mongoose.Schema.Types.ObjectId, ref: 'Collection' } })
- 【不推荐】强制禁用保留字校验:如果业务上必须使用
collection作为字段名,可以在Schema配置项中添加supressReservedKeysWarning: true参数关闭警告,但该方案仅能屏蔽报错,无法解决字段和内置属性的冲突,后续可能触发其他未知功能异常:
const productSchema = mongoose.Schema({ // 所有原有字段保持不变 }, { supressReservedKeysWarning: true })
内容的提问来源于stack exchange,提问作者Salman
相关产品推荐
相关产品推荐

