Как изменить существующую схему в мангусте? - PullRequest
1 голос
/ 25 июня 2019

Я использую мангуст для своего приложения.У меня было несколько простых моделей, которые я использовал для своего приложения, таких как сообщения, пользователи и профиль.Теперь я немного изменил схему, но я получаю эту ошибку каждый раз, когда пытаюсь запустить программу

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
    }
});

Кто-нибудь может подсказать мне, как изменить схему в mongoose?Я не хочу использовать 'strict: false', также я не хочу, чтобы данные, уже существующие в моем mongodb, исчезли.Мне просто нужны те же старые данные с этой новой структурой.

1 Ответ

0 голосов
/ 25 июня 2019

Вы пытались создать ref для commentSchema вместо использования дополнительного документа?Что-то вроде этого?

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

Таким образом, вы можете использовать другую модель и схему и не перезаписывать существующие данные.

...