一尘不染

通过JSON格式的“说明”即时定义Mongoose模式

node.js

我正在制作一个Web应用程序,该应用程序允许用户通过首先以客户端形式“注册”架构来在服务器上创建自己的自定义MongoDB集合。

因此,用户将创建一个架构客户端-使用如下形式表示:http :
//r.github.com/annotationsformatter/

因此,客户端Js将生成以下形式的JSON对象:

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

接下来,页面将把该对象发送到服务器,服务器将把这些东西转换data为适当的Mongoose模式,并从中创建一个集合名称为collection的集合person

我迷路了-我将如何去做呢?我说的是转换为模式的部分。


阅读 220

收藏
2020-07-07

共1个答案

一尘不染

如果我正确理解了目标,您将希望遍历dataJSON对象字段中的每个字段定义,然后通过将其映射到实际类型将其转换为猫鼬模式的有效字段。因此,您可以从这样的东西开始:

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)
}

为了处理嵌入式对象和数组类型,您可能需要对其进行修改以使其具有递归性,并在遇到这些类型的对象时更加深入,因为字段可以与任意深度/结构嵌套在一起。

希望这可以帮助。

2020-07-07