Как удалить модель из мангуста?

Я не имею в виду удаление документа или документов. Я имею в виду полностью удалить модель, чтобы мангуст уже не знал об этом. После объявления модели я не могу понять, как заставить мангуста забыть эту модель, чтобы ее можно было воссоздать.

mongoose.model('Book', bookSchema);
mongoose.model('Book', bookSchema);

В настоящее время приведенное выше исключает.

OverwriteModelError: Невозможно перезаписать модель "Книга" после компиляции.

Я хотел бы сделать что-то вроде этого...

mongoose.model('Book', bookSchema);
mongoose.removeModel('Book');
mongoose.model('Book', bookSchema);

... и не получить никаких ошибок. Любые идеи?

Ответ 1

попробуйте это

delete mongoose.connection.models['Book'];

а затем перерегистрируйте/повторно инициализируйте его. он будет работать нормально

Ответ 2

Похоже, вам придется перезаписать часть исходного кода, чтобы удалить модель, добавить новую, поскольку Mongoose гарантирует, что модель не существует, прежде чем она захочет создать новую, который может быть или не быть больше, чем вы хотите:

if (this.models[name] && !collection) {
    // model exists but we are not subclassing with custom collection
    if (schema instanceof Schema && schema != this.models[name].schema) {
      throw new MongooseError.OverwriteModelError(name);
    }
    return this.models[name];
}

Строка 587 https://github.com/LearnBoost/mongoose/blob/master/lib/connection.js

Обновление автора вопроса:

Благодаря этому ответу я обнаружил, что вы можете получить доступ к моделям, определенным в соединении, через connection.models. В моем сценарии я тестировал плагин mongoose с Mocha, и я хотел очистить модели между каждыми unit test.

afterEach(function () {
    mongoose.connection.models = {};
});