Javascript 从JSON格式动态定义Mongoose模式';说明';

Javascript 从JSON格式动态定义Mongoose模式';说明';,javascript,mongodb,node.js,mongoose,Javascript,Mongodb,Node.js,Mongoose,我正在制作一个web应用程序,它允许用户通过首先在客户端表单中“注册”模式,在我的服务器上创建自己的自定义MongoDB集合 因此,用户将创建一个模式客户端-比如使用如下表单: 因此,客户端Js将生成表单的JSON对象,例如: { "collection_name": "person", "data": { "name": "String", "email": "String", "id", "Number", }

我正在制作一个web应用程序,它允许用户通过首先在客户端表单中“注册”模式,在我的服务器上创建自己的自定义MongoDB集合

因此,用户将创建一个模式客户端-比如使用如下表单:

因此,客户端Js将生成表单的JSON对象,例如:

{
    "collection_name": "person",
    "data": 
    {
        "name": "String",
        "email": "String",
        "id", "Number",
    }
}
接下来,页面将把这个对象发送到服务器,服务器将把
数据中的内容转换成一个合适的Mongoose模式,并从中创建一个集合名为
person


我迷路了——我该怎么做呢?我说的是转换到模式的部分。

如果我正确理解了目标,您将希望循环JSON对象中
数据
字段中的每个字段定义,并通过将其映射到实际类型将其转换为mongoose模式的有效字段。因此,您可以从以下内容开始:

var mongoose = require('mongoose')

var typeMappings  =
{"String":String, 
 "Number":Number,
 "Boolean":Boolean,
 "ObjectId":mongoose.Schema.ObjectId,
  //....etc
}

function makeSchema(jsonSchema){
  var outputSchemaDef = {}
  for(fieldName in jsonSchema.data){
    var fieldType = jsonSchema.data[fieldName]
    if(typeMappings[fieldType]){
      outputSchemaDef[fieldName] = typeMappings[fieldType]
    }else{
      console.error("invalid type specified:", fieldType)
    }
  }
  return new mongoose.Schema(outputSchemaDef)
}
为了处理嵌入的对象和数组类型,您可能需要修改它,使其具有递归性,并在遇到这些类型的对象时降低其深度,因为字段可以与任意深度/结构嵌套在一起


希望这有帮助。

我编写了一个
node.js
库,正是为了这个目的:从
.json
配置文件生成mongoose模型

它叫。它支持所有mongoose类型,它有用于验证器、setter、getter和默认值的钩子


希望能有所帮助。

我不知道是否建议这样做,但我只需要我的JSON文件,然后我只需要删除在require过程中创建的“name”属性

var jsonSchema = require('schema.json');
delete jsonSchema.name;

var MySchema = new Schema(jsonSchema);

好的,你可以从中查看文档。定义模型在第一页。除此之外,还有什么你不知道的吗?您希望在何处使用这些模块。。等定义一个模型很简单,我需要知道的是如何将这个JSON格式的对象(由一堆字符串组成)转换为一个真正的模式,这应该包括自动将
“name”:“String”
转换为
name:String
几乎完全符合我的需要。我对Js有点陌生,所以谢谢!这件事澄清了很多。