2011-12-14 9 views
6

मैं एक वेब ऐप बना रहा हूं जो उपयोगकर्ताओं को अपने सर्वर पर अपने स्वयं के कस्टम मोंगोडीबी संग्रह बनाने की अनुमति देता है, पहले क्लाइंट में स्कीमा को पंजीकृत करना साइड फॉर्मएक JSON- स्वरूपित 'विवरण' से एक मोंगोस स्कीमा ऑन-द-फ्लाई को परिभाषित करना

तो उपयोगकर्ता एक स्कीमा ग्राहक के पक्ष पैदा करेगा - इस तरह एक फार्म का उपयोग करते हुए कहते हैं: http://r.github.com/annotationsformatter/

तो क्लाइंट साइड जे एस फार्म की एक JSON ऑब्जेक्ट उत्पन्न होगा, उदाहरण के लिए:

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

अगला, पृष्ठ इस ऑब्जेक्ट को सर्वर पर भेज देगा, जो सामग्री को data में उचित मोंगोज़ स्कीमा में परिवर्तित करना चाहिए और संग्रह नाम person से संग्रह संग्रह करना चाहिए।

मैं खो गया हूं - मैं यह करने के बारे में कैसे जाऊं? मैं रूपांतरण-से-स्कीमा भाग के बारे में बात कर रहा हूं।

+0

ठीक है आप http://mongoosejs.com/ से दस्तावेज़ देख सकते हैं। एक मॉडल को परिभाषित करना पहले पृष्ठ पर है। इसके अलावा आपको कुछ भी चाहिए और शायद नहीं पता ..? आप इन मॉड्यूल का उपयोग करना चाहते हैं .. आदि ..? – alessioalex

+0

एक मॉडल को परिभाषित करना मामूली है, मुझे यह जानने की ज़रूरत है कि मैं इस जेएसओएन-स्वरूपित ऑब्जेक्ट (जो तारों का एक गुच्छा) को वास्तविक स्कीमा में परिवर्तित कर दूंगा, जिसमें कुछ नाम शामिल होना चाहिए जैसे "नाम": "स्ट्रिंग" 'to' name: स्ट्रिंग ' –

उत्तर

11

यदि मैं सही ढंग से लक्ष्य को समझता हूं, तो आप JSON ऑब्जेक्ट में data फ़ील्ड में उन फ़ील्ड परिभाषाओं में से प्रत्येक पर लूप चाहते हैं और इसे वास्तविक प्रकार पर मैप करके एक मोंगोज स्कीमा के लिए एक वैध फ़ील्ड में परिवर्तित कर देंगे। तो अगर आप के साथ 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

लगभग वही चीज़ जो मुझे चाहिए था। मैं जेएस के लिए थोड़ा नया हूँ, तो धन्यवाद! यह बहुत साफ हो जाता है। –

12

मैंने इस उद्देश्य के लिए node.js लाइब्रेरी लिखी है: .json कॉन्फ़िगरेशन फ़ाइलों से mongoose मॉडल उत्पन्न करें।

इसे mongoose-gen कहा जाता है। यह सभी मोंगोज़ प्रकारों का समर्थन करता है, इसमें वैधता, सेटर्स, गेटर्स और डिफ़ॉल्ट मानों के लिए हुक हैं।

उम्मीद है कि यह मदद करता है।

0

मुझे नहीं पता कि इसे ऐसा करने की अनुशंसा की जाती है, लेकिन मुझे बस अपनी JSON फ़ाइल की आवश्यकता है और फिर मैं आवश्यकता के दौरान "नाम" संपत्ति को हटा देता हूं।

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

var MySchema = new Schema(jsonSchema); 
संबंधित मुद्दे