我在应用程序中使用猫鼬。我有一些用于我的应用程序的简单模型,例如Posts,Users和Profile。现在,我对模式进行了一些更改,但是每次尝试运行程序时都会出现此错误
OverwriteModelError: Cannot overwrite `post` model once compiled.
[0] at new OverwriteModelError (C:\Users\prate\PRACTISE CODE\Evaluate\node_modules\mongoose\lib\error\overwriteModel.js:20:11)
[0] at Mongoose.model (C:\Users\prate\PRACTISE CODE\Evaluate\node_modules\mongoose\lib\index.js:472:13)
at Object.<anonymous> (C:\Users\prate\PRACTISE CODE\Evaluate\models\Post.js:45:34)
[0] at Module._compile (internal/modules/cjs/loader.js:701:30)
[0] at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
[0] at Module.load (internal/modules/cjs/loader.js:600:32)
[0] at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
[0] at Function.Module._load (internal/modules/cjs/loader.js:531:3)
at Module.require (internal/modules/cjs/loader.js:637:17)
[0] at require (internal/modules/cjs/helpers.js:22:18)
[0] at Object.<anonymous> (C:\Users\prate\PRACTISE CODE\Evaluate\routes\api\posts.js:8:14)
[0] at Module._compile (internal/modules/cjs/loader.js:701:30)
[0] at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
[0] at Module.load (internal/modules/cjs/loader.js:600:32)
[0] at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
[0] at Function.Module._load (internal/modules/cjs/loader.js:531:3)
我尝试在StackOverflow上搜索有关该问题的方法,有一个解决方案,那就是设置'strict:false',但是我不希望我的用户模型带有垃圾值,我只想重新定义结构。
以前,我的Post模型具有以下字段:
const PostSchema = new Schema({
user: {
type: Schema.Types.ObjectId,
ref: 'users'
},
text: {
type: String,
required: true,
},
speechBody: {
type: String
},
youtubeLink: {
type: String
},
comments : [ {
text: {
type: String
}
}
],
});
现在,我定义了一个名为CommentSchema的新模式,该模式具有喜欢和不同之处以及许多其他功能。
因此,现在我的模型如下:
const PostSchema = new Schema({
user: {
type: Schema.Types.ObjectId,
ref: 'users'
},
text: {
type: String,
required: true,
},
speechBody: {
type: String
},
youtubeLink: {
type: String
},
comments : [commentSchema],
});
CommentSchema如下所示:
const CommentSchema = new Schema({
user: {
type: Schema.Types.ObjectId,
ref: 'users'
},
text: {
type: String,
required: true
},
name : {
type: String,
},
avatar: {
type: String
},
date: {
type: Date,
default: Date.now
}
});
有人可以指导我如何在猫鼬中修改架构吗?我不想使用'strict:false',也不想我的mongodb中已经存在的数据消失。我只想要具有这种新结构的相同旧数据。
答案 0 :(得分:0)
您是否尝试过为commentSchema创建ref
而不是使用子文档?
像这样吗
comments:[{ type: Schema.Types.ObjectId, ref: 'Comments' }]
这样,您可以拥有另一个模型和架构,而不会覆盖现有数据。