如何摆脱错误:“OverwriteModelError:一旦编译就无法覆盖\`undefined\`模型。”?

新手上路,请多包涵

我有一个通用的方法来更新 MongoDB 中任何集合的文档吗?

以下代码在文件名 Deleter.js 中

module.exports.MongooseDelete = function (schemaObj, ModelObject);
{
  var ModelObj = new mongoose.Model("collectionName",schemaObj);
  ModelObj.remove(ModelObject);
}

并在我的主文件 app.js 中调用如下:

 var ModObj = mongoose.model("schemaName", schemasObj);
var Model_instance = new ModObj();
var deleter = require('Deleter.js');
deleter.MongooseDelete(schemasObj,Model_instance);

我收到以下错误:

 OverwriteModelError: Cannot overwrite `undefined` model once compiled.
    at Mongoose.model (D:\Projects\MyPrjct\node_modules\mongoose\lib\index.js:4:13)

我只进行第二种方法调用。如果有人有解决方案,请告诉我。

原文由 Amol M Kulkarni 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 633
2 个回答

我认为您已经在同一架构上实例化了 mongoose.Model() 两次。您应该只创建每个模型一次,并在需要时拥有一个全局对象来获取它们

我假设您在目录下的不同文件中声明不同的模型 $YOURAPP/models/

 $YOURAPPDIR/models/
 - index.js
 - A.js
 - B.js

index.js

 module.exports = function(includeFile){
    return require('./'+includeFile);
};

js

 module.exports = mongoose.model('A', ASchema);

B.js

 module.exports = mongoose.model('B', BSchema);

在你的 app.js

 APP.models = require('./models');  // a global object

当你需要它时

// Use A
var A = APP.models('A');
// A.find(.....

// Use B
var B = APP.models('B');
// B.find(.....

原文由 hotienvu 发布,翻译遵循 CC BY-SA 3.0 许可协议

我设法解决了这样的问题:

 var Admin;

if (mongoose.models.Admin) {
  Admin = mongoose.model('Admin');
} else {
  Admin = mongoose.model('Admin', adminSchema);
}

module.exports = Admin;

原文由 paulbjensen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题