2011-12-14 7 views
6

私は、ユーザーが自分のカスタムMongoDBコレクションを自分のサーバー上に作成することを可能にするWebアプリケーションを作成しています。サイドフォーム。JSONフォーマットの「説明」からオンザフライでMongooseスキーマを定義

ので、ユーザは、スキーマのクライアント側を作成する - このようにフォームを使用して言う:http://r.github.com/annotationsformatter/

ので、クライアント側のJSは、たとえば、フォームのJSONオブジェクトを生成します。

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

次に、ページはこのオブジェクトをサーバに送ります。サーバーはdataのものを適切なモンゴーススキーマに変換し、コレクション名personのコレクションを作成する必要があります。

私は迷子になりました - どうすればこのことをやりますか?私はスキーマ変換の話をしています。

+0

http://mongoosejs.com/からドキュメントを確認できます。モデルの定義は最初のページにあります。それ以外に必要なものは何か、おそらく知らないでしょうか?どこでこれらのモジュールを使用したいですか..など..? – alessioalex

+0

モデルを定義するのは簡単ですが、私はこのJSON形式のオブジェクト(文字列の束)を実際のスキーマに変換する方法を知っておく必要があります。実際のスキーマには、 "name" 'to' name:String' –

答えて

11

目的を正しく理解していれば、JSONオブジェクトのdataフィールドにフィールド定義をループし、それを実際のタイプにマッピングすることでmongooseスキーマの有効なフィールドに変換する必要があります。ですから、このようなsomethignで始まるかもしれない:

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

埋め込みオブジェクトと配列型に対応するために、あなたはおそらく、それはこれらのタイプのオブジェクトに遭遇したとき、それは再帰的にするために、これを変更し、より深くを下降することになるでしょうフィールドは任意の深さ/構造と共に入れ子にすることができるからです。

これが役に立ちます。

+0

ほとんど私が必要としていたものです。私はJsに少し新しく、ありがとう!これは多くをクリアします。 –

12

.json設定ファイルからmongooseモデルを生成するために、私はnode.jsライブラリを書いています。

mongoose-genと呼ばれています。これは、すべてのマングースタイプをサポートしています。バリデーター、セッター、ゲッター、およびデフォルト値のフックを持っています。

希望します。

0

このようにすることをお勧めしますかどうかわかりませんが、JSONファイルが必要なだけで、必要なときに "名前"プロパティを削除するだけです。

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

var MySchema = new Schema(jsonSchema); 
関連する問題