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

我正在创build一个Web应用程序,允许用户在我的服务器上创build自己的自定义MongoDB集合,方法是首先在客户端窗体中“注册”模式。

所以用户将创build一个模式客户端 – 说使用像这样的表单: http : //r.github.com/annotationsformatter/

所以客户端Js会生成一个表单的JSON对象,例如:

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

接下来,页面将发送这个对象到服务器,它应该将data的东西转换成合适的Mongoose Schema,并从中创build一个集合名称person的集合。

我迷路了 – 我怎么去做这个? 我正在谈论转换到模式部分。

如果我正确理解目标,则需要遍历JSON对象中data字段中的每个字段定义,并通过将其映射为实际types将其转换为适用于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) } 

为了处理embedded的对象和数组types,你可能会想要修改它,使其recursion,遇到这些types的对象时会下降得更深,因为这些字段可以用任意深度/结构嵌套在一起。

希望这可以帮助。

我已经为此写了一个node.js库:从.jsonconfiguration文件生成mongoose模型。

这叫做mongoose 。 它支持所有的mongoosetypes,它具有validation器,设置器,获取器和默认值的钩子。

希望能帮助到你。

我不知道是否build议这样做,但我只是需要我的JSON文件,然后我只是删除需求中的“名称”属性创build。

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