mongodb Mongoose OverwriteModelError:编译后无法覆盖模型

euoag5mw  于 2023-08-04  发布在  Go
关注(0)|答案(3)|浏览(146)

我为Mongoose模型创建了一个名为data_models/index. js的模块,非常简单。

var mongoose = require('mongoose'),
    Schema = mongoose.Schema,

    var GlobalTagsSchema = new Schema ({
        _Id: Schema.Types.ObjectId ,
        tag_name: {type: String, require: true, unique: true},
        createdDate : { type: Date, default: Date.now } ,
        alias : [{
            tag_name: {type: String},
            createdDate: {type: Date, default: Date.now}
        }]

    });

module.exports = {
        InitDB:function(user,pass){
            var conn = mongoose.connect('mongodb://'+user+':'+pass+'@localhost/db');
            var db = mongoose.connection;
            db.on('error',console.error.bind(console, 'connection error ....'));
            db.once('open',function callback(){
                console.log(' Database connected..');
            });
            return db ;
        },
        Global_Tagas : mongoose.model('Global_Tags', GlobalTagsSchema)
}

字符串
现在当我在Mocha中运行我的测试时,调用

var nebulab_data_model = require('nebulab_data_models');
       nebulab_data_model.InitDB(process.env.MONGODB_USER,process.env.MONGODB_PASSWORD);


当我运行我的测试时,我得到以下错误:

/Users/Tag/node_modules/mongoose/lib/index.js:334
      throw new mongoose.Error.OverwriteModelError(name);
            ^
OverwriteModelError: Cannot overwrite `Global_Tags` model once compiled.

wgeznvg7

wgeznvg71#

发生错误的原因是您已经定义了架构。查看解决方案here

s4n0splo

s4n0splo2#

多次使用同一型号时,以这种方式导出

module.exports = mongoose.models['Global_Tags'] || mongoose.model('Global_Tags', GlobalTagsSchema)

字符串

ulmd4ohb

ulmd4ohb3#

这是一个棘手的情况,我只是花了7个小时试图调试这个问题,因为今天我不能使用这里提供的。
这里是什么帮助我,我得到了它从这个官方网站https://mongoosejs.com/docs/faq.html#overwrite-model-error
例如,请记住,mongoose.model('ModelName', schema)要求“ModelName”是唯一的,因此您可以使用mongoose.model('ModelName')访问模型。如果将mongoose.model('ModelName', schema);放入mocha beforeEach()钩子中,则此代码将在每次测试之前尝试创建一个名为“ModelName”的新模型,因此您将得到一个错误。
确保只使用给定名称创建一次新模型。如果需要创建多个同名模型,请创建一个新连接并将模型绑定到该连接。
例如;

const mongoose = require('mongoose');
const connection = mongoose.createConnection(/* ... */);

// use mongoose.Schema
const kittySchema = mongoose.Schema({ name: String });

// use connection.model
const Kitten = connection.model('Kitten', kittySchema);

字符串

相关问题