【问题标题】:Defining a Mongoose schema on-the-fly from a JSON-formatted 'description'从 JSON 格式的“描述”动态定义 Mongoose 模式
【发布时间】:2012-01-20 05:24:42
【问题描述】:

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

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

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

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

接下来,页面会将这个对象发送到服务器,服务器应该将 data 中的内容转换为适当的 Mongoose Schema 并从中创建一个集合,集合名称为 person

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

【问题讨论】:

  • 您可以查看来自mongoosejs.com 的文档。定义模型在第一页。除此之外,您还需要什么,也许不知道.. ?你想在哪里使用这些模块..等..?
  • 定义模型很简单,我需要知道如何将这个 JSON 格式的对象(一堆字符串)转换为真正的模式,这应该涉及自动转换 @ 987654326@到name: String

标签: javascript mongodb node.js mongoose


【解决方案1】:

我为此编写了一个node.js 库:从.json 配置文件生成猫鼬模型。

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

希望对你有帮助。

【讨论】:

    【解决方案2】:

    如果我正确理解目标,您将希望遍历 JSON 对象中 data 字段中的每个字段定义,并通过将其映射到实际类型将其转换为猫鼬模式的有效字段。所以你可能会从这样的事情开始:

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

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

    希望这会有所帮助。

    【讨论】:

    • 几乎正是我所需要的。我对Js有点陌生,所以谢谢!这清楚了很多。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      相关资源
      最近更新 更多