无法将路径“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”的默认值设置为猫鼬模式实例的主要内容,如果未能解决你的问题,请参考以下文章

如何将相同的模式引用为猫鼬中的类型[重复]

如何使用 NestJS 命名法为猫鼬写下嵌套模式 [关闭]

如何获取 Model.countDocuments() 函数返回的文档计数并将其设置为猫鼬中的其他字段

Mongoose:检查对象是不是为猫鼬对象

无法将猫鼬虚拟与打字稿一起使用

无法将猫鼬虚拟与打字稿一起使用