此问题可能是由于猫鼬兼容性引起的。我正在开发一个现有的应用程序。今天,当我尝试重新启动应用程序时突然出现了这个问题,但由于以下错误而失败
无法将路径stats
的默认值设置为猫鼬模式实例
堆栈跟踪将我带到用户模型的第47行。一行说。
stats: { type: UserStatsSchema, default: UserStatsSchema },
在user.js模式文件中新Schema()调用的上方,定义了UserStatsSchema
const UserStatsSchema = new Schema({
numLikes: { type: Number, default: 0 },
numPosts: { type: Number, default: 0 }
}, {_id: false});
我试图通过互联网进行搜索。由于我是猫鼬的新手,它是架构类型转换,所以我不确定该解决什么问题。
答案 0 :(得分:1)
您应该将嵌套模式默认为返回一个返回空对象的函数。猫鼬将根据您的UserStatsSchema
类型进行类型转换,并确保您配置的默认值。
stats: { type: UserStatsSchema, default: () => ({}) },
这是基于猫鼬官方Github的这两个问题
我们对8fea1d9进行了小幅改进,消除了大部分性能影响,但是上述脚本仍然比没有默认设置时慢了2倍。因此,在32c5ed0中,如果将路径的默认值设置为Mongoose模式实例,我们会使Mongoose抛出错误。无论如何,没有理由这么做。
稍后介绍了为什么未将其作为主要版本更新推送
我承认此更改对补丁来说有点沉重,但可以看出(1)将架构实例的默认值设置为没有任何用处,并且(2)它对性能产生了重大影响,我认为尽早而不是迟早进行此更改是值得的。抱歉,遇到任何麻烦。
答案 1 :(得分:0)
已替换:
stats: { type: UserStatsSchema, default: UserStatsSchema }
使用
stats: [ UserStatsSchema ]