Как разрешить OverwriteModelError в mongodb с помощью mongoose - PullRequest
0 голосов
/ 30 мая 2020

В моем коде я создаю collections динамически. После создания, если я хочу удалить, я могу его удалить. После этого, если я попытаюсь создать еще раз с тем же именем коллекции (модели), я получаю сообщение об ошибке:

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

Как решить эту проблему?

schemamodel. js:

/* model.js */
'use strict'; 
var mongoose = require('mongoose'),
    Schema = mongoose.Schema; 
function dynamicModel(suffix) { 
    var collsName = suffix.charAt(0).toUpperCase() + suffix.slice(1); 
    var newSchema = new Schema({ 
        product_name: {
            type: String
        } 
    }, { versionKey: false }); 
    return mongoose.model(collsName, newSchema, suffix); 
} 
module.exports = dynamicModel;

data.controller. js:

module.exports.newCollection = (req, res, next) => {
    var collectionName = req.query.collectionName;
    var NewModel;
    mongoose.connection.db.listCollections().toArray(function(err, names) {
        if (err) {
            console.log(err);
        } else {
            names.forEach(function(e, i, a) {
                if (e.name == collectionName.toLowerCase()) {
                    console.log("The collection already exists");
                } else {
                    console.log("The collection not exists");
                    NewModel = require(path.resolve('./models/schemamodel.js'))(collectionName);
                    NewModel.create({}, function(err, doc) {});
                }
            });
        }
    });
}
//Delete collection
module.exports.deleteCategory = (req, res, next) => {
    var deletecateName = req.query.deletecateName;
    deletecateName = deletecateName.toLowerCase();
    mongoose.connection.dropCollection(deletecateName, (error, result) => {
        if (error) {
            console.log('Collection is not dropped');
        } else {
            console.log('Collection dropped');
        }
    })
}
...