你如何从mongoose中删除模型?

我不是指删除文件或文件。 我的意思是完全删除模型,使mongoose不再知道它。 声明一个模型后,我不知道如何使mongoose忘记该模型,以便它可以被重新创build。

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

目前上面抛出一个exception。

OverwriteModelError:编译后无法覆盖“Book”模型。

我想能够做到这样的事情…

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

…并没有得到任何错误。 有任何想法吗?

尝试这个

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

然后重新注册/重新初始化它。 它会正常工作

看起来你必须重写一些源代码才能删除模型并添加一个新的模型,因为Mongoose确保模型不存在,然后它就可以创build一个新的模型或者可能不会超过你所关心的:

 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访问连接上定义的模型。 在我的情况下,我正在用Mochatesting一个mongoose插件,我想清除每个unit testing之间的模型。

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