13

ドキュメントやドキュメントを削除するという意味ではありません。モデルを完全に削除して、マングースが認識しないようにすることを意味します。モデルを宣言した後、マングースにそのモデルを忘れさせて再作成する方法がわかりません。

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

現在、上記は例外をスローします。

OverwriteModelError: 一度コンパイルすると、'Book' モデルを上書きできません。

このようなことができるようになりたい...

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

...そしてエラーは発生しません。何か案は?

4

4 に答える 4

19

これを試して

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

その後、再登録/再初期化します。それはうまくいきます

于 2014-09-01T11:00:43.017 に答える
12

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。私のシナリオでは、Mochaを使用してマングース プラグインをテストしていましたが、各ユニット テストの間にモデルをクリアしたいと考えていました。

afterEach(function () {
    mongoose.connection.models = {};
});
于 2013-10-28T19:49:17.937 に答える