如何修改猫鼬中的现有架构?

时间:2019-06-25 06:43:02

标签: mongodb mongoose mongoose-schema

我在应用程序中使用猫鼬。我有一些用于我的应用程序的简单模型,例如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中已经存在的数据消失。我只想要具有这种新结构的相同旧数据。

1 个答案:

答案 0 :(得分:0)

您是否尝试过为commentSchema创建ref而不是使用子文档? 像这样吗

comments:[{ type: Schema.Types.ObjectId, ref: 'Comments' }]

这样,您可以拥有另一个模型和架构,而不会覆盖现有数据。