我正在创建一个Web应用程序,允许用户首先在客户端表单中“注册”架构,在我的服务器上创建自己的自定义MongoDB集合。
因此,用户将创建一个架构客户端 - 比如使用如下表单:http://r.github.com/annotationsformatter/
因此客户端Js将生成表单的JSON对象,例如:
{
"collection_name": "person",
"data":
{
"name": "String",
"email": "String",
"id", "Number",
}
}
接下来,该页面将此对象发送到服务器,服务器应将data
中的内容转换为正确的Mongoose Schema,并从中创建集合名称为person
的集合。
我迷路了 - 我怎么会这样做?我在谈论转换到架构部分。
答案 0 :(得分:12)
我为此目的编写了一个node.js
库:从.json
配置文件生成mongoose模型。
它被称为mongoose-gen。它支持所有的猫鼬类型,它有验证器,设置器,getter和默认值的钩子。
希望它有所帮助。
答案 1 :(得分:11)
如果我正确理解了目标,您将需要循环遍历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)
}
为了处理嵌入对象和数组类型,您可能希望修改它以使其递归,并在遇到这些类型的对象时下降得更深,因为字段可以与任意深度/结构嵌套在一起
希望这有帮助。
答案 2 :(得分:0)
我不知道是否建议这样做,但我只需要我的JSON文件,然后我只需删除在需求期间创建的“name”属性。
var jsonSchema = require('schema.json');
delete jsonSchema.name;
var MySchema = new Schema(jsonSchema);