无法将路径“stats”的默认值设置为猫鼬模式实例
Posted
技术标签:
【中文标题】无法将路径“stats”的默认值设置为猫鼬模式实例【英文标题】:Cannot set default value of path `stats` to a mongoose Schema instance 【发布时间】:2020-10-22 16:45:01 【问题描述】:这个问题可能是由于猫鼬兼容性引起的。我正在开发一个现有的应用程序。今天突然开始出现这个问题,当我尝试重新启动应用程序时,由于以下错误而失败
无法将路径 stats
的默认值设置为 mongoose Schema 实例
堆栈跟踪将我带到我的用户模型的第 47 行。行说。
stats: type: UserStatsSchema, default: UserStatsSchema ,
在 user.js 模态文件中的 new Schema() 调用的正上方,定义了 UserStatsSchema
const UserStatsSchema = new Schema(
numLikes: type: Number, default: 0 ,
numPosts: type: Number, default: 0
, _id: false);
我试图通过在互联网上搜索来弄清楚。由于我是 mongoose 的新手,而且它是 Schema 类型转换,我不确定我需要什么来解决这个问题。
【问题讨论】:
【参考方案1】:你应该让你的嵌套模式默认返回一个返回空对象的函数。 Mongoose 将处理类型转换为您的 UserStatsSchema
类型并确保您配置的默认值。
stats: type: UserStatsSchema, default: () => () ,
这是基于 Mongoose 官方 Github 上的这 2 个问题
-
https://github.com/Automattic/mongoose/issues/9104
https://github.com/Automattic/mongoose/issues/8751
我们对 8fea1d9 进行了小幅改进,消除了大部分性能影响,但上述脚本最终仍然比没有默认脚本慢 2 倍。因此,在 32c5ed0 中,如果您将路径的默认设置为 Mongoose 模式实例,我们会让 Mongoose 抛出错误。无论如何都没有理由这样做。
稍后描述为什么它没有作为主要版本更新推送
我承认这个更改对于补丁来说有点重,但是看到 (1) 为模式实例设置默认值并没有做任何有用的事情,以及 (2) 它对性能有显着影响,我认为早点而不是晚点做出这个改变是值得的。给您添麻烦了。
【讨论】:
【参考方案2】:替换:
stats: type: UserStatsSchema, default: UserStatsSchema
与
stats: [ UserStatsSchema ]
【讨论】:
以上是关于无法将路径“stats”的默认值设置为猫鼬模式实例的主要内容,如果未能解决你的问题,请参考以下文章