无法将路径`stats`的默认值设置为猫鼬模式实例

时间:2020-07-02 06:35:02

标签: mongoose schema default mongoose-schema

此问题可能是由于猫鼬兼容性引起的。我正在开发一个现有的应用程序。今天,当我尝试重新启动应用程序时突然出现了这个问题,但由于以下错误而失败

无法将路径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});

我试图通过互联网进行搜索。由于我是猫鼬的新手,它是架构类型转换,所以我不确定该解决什么问题。

2 个答案:

答案 0 :(得分:1)

您应该将嵌套模式默认为返回一个返回空对象的函数。猫鼬将根据您的UserStatsSchema类型进行类型转换,并确保您配置的默认值。

stats: { type: UserStatsSchema, default: () => ({}) },

这是基于猫鼬官方Github的这两个问题

  1. https://github.com/Automattic/mongoose/issues/9104
  2. https://github.com/Automattic/mongoose/issues/8751

我们对8fea1d9进行了小幅改进,消除了大部分性能影响,但是上述脚本仍然比没有默认设置时慢了2倍。因此,在32c5ed0中,如果将路径的默认值设置为Mongoose模式实例,我们会使Mongoose抛出错误。无论如何,没有理由这么做。

稍后介绍了为什么未将其作为主要版本更新推送

我承认此更改对补丁来说有点沉重,但可以看出(1)将架构实例的默认值设置为没有任何用处,并且(2)它对性能产生了重大影响,我认为尽早而不是迟早进行此更改是值得的。抱歉,遇到任何麻烦。

答案 1 :(得分:0)

已替换:

stats: { type: UserStatsSchema, default: UserStatsSchema }

使用

stats: [ UserStatsSchema ]