Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json MongoDB:从MongoDB中存储的文档创建Mongoose模型/模式_Json_Node.js_Mongodb_Model_Mongoose - Fatal编程技术网

Json MongoDB:从MongoDB中存储的文档创建Mongoose模型/模式

Json MongoDB:从MongoDB中存储的文档创建Mongoose模型/模式,json,node.js,mongodb,model,mongoose,Json,Node.js,Mongodb,Model,Mongoose,正如标题所描述的,我试图找出是否可以用现有MongoDB文档的JSON实例化一个新的mongoose模型和模式?似乎只要在Mongoose运行之前检索到文档,我就可以这样做 这可能吗?理想情况下,我希望在不需要重新启动节点的情况下动态地执行此操作 ****编辑*******以下是我尝试过的。 注意:如果模式创建是异步的,setTimeout在其中。这是一个简陋的模型,只是为了看看这个概念是否有效。 这不管用 function initModels(models) { for (var

正如标题所描述的,我试图找出是否可以用现有MongoDB文档的JSON实例化一个新的mongoose模型和模式?似乎只要在Mongoose运行之前检索到文档,我就可以这样做

这可能吗?理想情况下,我希望在不需要重新启动节点的情况下动态地执行此操作

****编辑*******以下是我尝试过的。 注意:如果模式创建是异步的,setTimeout在其中。这是一个简陋的模型,只是为了看看这个概念是否有效。 这不管用

function initModels(models) {

    for (var i = 0, l = models.length; i < l; i++) {
        console.log(models[i])
        exports[models[i].name + "Schema"] = mongoose.Schema(models[i].model, {collection: "ModelData"});

        (function(itrModel){
            var model = itrModel;
            setTimeout(function(){
                exports[model.name] = mongoose.model(model.name.toUpperCase(), model.name + "Schema");
            },2000)
        })(models[i])
    }
}

exports.getModels = function () {
    DataConnection.Connect(function (db) {

        var collectionName = "Models";
        var collection = db.collection(collectionName);

        collection.find().toArray(function (err, models) {

            initModels(models);

        })
    })
};

Schema对象的构造函数仅将对象作为参数。您需要遍历文档中的键、子键和数组,并为对象的每个路径添加键和数据类型,然后将最终的对象传递给构造函数。唯一的技巧是如何确定每个路径的数据类型。您必须测试文档中的每个值,以确定它是否是字符串、数字、日期……如果重启是唯一的问题,为什么不尝试一下呢
{
    "name" : {
        "type" : "String",
        "required" : true
    },
    "email" : {
        "type" : "String",
        "required" : false,
        "index" : true,
        "index" : true
    },
    "password" : {
        "type" : "String",
        "required" : true
    },
    "role" : {
        "type" : "String",
        "required" : true
    },
    "createDate" : {
        "type" : "Number",
        "required" : true
    }
}