繁体   English   中英

从JSON格式的“描述”中即时定义Mongoose模式

[英]Defining a Mongoose schema on-the-fly from a JSON-formatted 'description'

我正在创建一个Web应用程序,它允许用户首先在客户端表单中“注册”架构,从而在我的服务器上创建自己的自定义MongoDB集合。

因此,用户将创建一个模式客户端 - 比如使用这样的表单: http//r.github.com/annotationsformatter/

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

{
    "collection_name": "person",
    "data": 
    {
        "name": "String",
        "email": "String",
        "id", "Number",
    }
}

接下来,页面将此对象发送到服务器,服务器应将data的内容转换为正确的Mongoose Schema并从中创建集合名称person的集合。

我迷路了 - 我怎么会这样做? 我在谈论转换到架构部分。

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

它被称为mongoose-gen 它支持所有mongoose类型,它具有验证器,setter,getter和默认值的钩子。

希望能帮助到你。

如果我正确理解了目标,您将需要在JSON对象的data字段中循环遍历每个字段定义,并通过将其映射到实际类型将其转换为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)
}

为了处理嵌入对象和数组类型,您可能希望修改它以使其递归,并在遇到这些类型的对象时下降得更深,因为字段可以与任意深度/结构嵌套在一起。

希望这可以帮助。

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

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

var MySchema = new Schema(jsonSchema);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM