2015-01-06 48 views
6

में मिश्रित डेटा प्रकार वाले किसी संपत्ति को परिभाषित करें मेरे पास पहले से ही एक काम करने वाला स्वैगर दस्तावेज़ है जो स्वैगर-यूआई प्रोजेक्ट का उपयोग करके दस्तावेज उत्पन्न करता है, लेकिन मैं मामूली समस्या में भाग रहा हूं।स्वैगर

मोंगोस डेटा प्रकार Mixed का समर्थन करता है, जो मूल रूप से एक असंरचित वस्तु है जिसमें कुछ भी शामिल हो सकता है। हालांकि, स्वैगर विनिर्देश के अनुसार एक संपत्ति के type के लिए केवल संभावित मान string, integer, number, boolean और array हैं। मैं दस्तावेज़ पर, Google पर, या गिटहब पर स्वैगर-स्पीक प्रोजेक्ट के लिए खुले मुद्दों में कुछ भी नहीं ढूंढ पाया है जो मिश्रित डेटा प्रकारों की अनुमति देगा।

स्वैगर-स्पेक दस्तावेज़ में, जहां वे type विकल्पों को परिभाषित करते हैं, वे JSON-Schema प्रोजेक्ट को संदर्भित करते हैं। JSON-Schema विनिर्देश के अनुसार object एक विकल्प होना चाहिए, लेकिन यह स्वैगर-स्पेक में संभावित मान के रूप में सूचीबद्ध नहीं है।

क्या किसी को एक स्वैगर दस्तावेज़ में इंगित करने के तरीके के बारे में पता है कि किसी मॉडल की संपत्ति में कोई मूल्य हो सकता है (या तो एक आदिम मूल्य या वस्तु)?

उदाहरण

नेवला स्कीमा परिभाषा:

var sampleSchema = new mongoose.Schema({ 
    lookupCodes : { type: [mongoose.Schema.Types.Mixed] }, 
    address: { type: mongoose.Schema.Types.Mixed } 
}); 

mongoose.model('Sample', sampleSchema); 

नेवला मॉडल के उपयोग:

var Sample = mongoose.model('Sample'); 
var doc = new Sample(); 

इन दो परिभाषित गुणों के लिए सभी वैध मान हैं:

doc.lookupCodes = ['A', 'B', 3, 4, 5, 'F']; 

doc.lookupCodes = ['A', { code: '123' }, 5]; 

doc.address = '123 Main St., San Jose, CA, 95125'; 

doc.address = { street: '123 Main St.', city: 'San Jose', state: 'CA', postalCode: '95125'} 

स्वैगर 1.2 दस्तावेज़ (स्निपेट):

"models": { 
    "Sample": { 
     "properties": { 
      "lookupCodes": { 
       "type": "array", 
       "items": { 
        "type": "??????" 
       }, 
       "description": "An array of lookup codes. Codes can be strings, numbers or an object containing the `code` property." 
      }, 
      "address": { 
       "type": "??????", 
       "description": "An address. This value can be a single string, containing all the elements of the address together, or it can be a structured object with each of the elements as separate properties of the object." 
      }, 

मैं बस डेवलपर दस्तावेज़ को देखने जाने के लिए एक रास्ता तलाश कर रहा हूँ पता है एक मॉडल के भीतर एक विशिष्ट संपत्ति को स्वीकार कर सकता है कि/किसी भी मूल्य (आदिम चर या वापसी एक वस्तु)।

+0

आप इस तरह के मॉडल का एक उदाहरण के साथ प्रश्न को संशोधित कर सकते हैं और आप (, क्या पैरामीटर प्रकार उदाहरण के लिए) के लिए इसका इस्तेमाल करने के लिए जहां चाहते हैं? आपके प्रश्न में विरोधाभासी विवरण शामिल हैं क्योंकि जिस प्रतिबंध का आप उल्लेख कर रहे हैं वह मॉडल पर लागू नहीं होता है, लेकिन आपका सैद्धांतिक समाधान उस चीज़ के अनुरूप नहीं लगता है जिसे आप प्राप्त करने का प्रयास कर रहे हैं। – Ron

+0

@webron सबसे सरल उदाहरण एक मॉडल की एक एकल संपत्ति होगी जिसमें संख्या या तार हो सकते हैं। mongoose 'मिश्रित' डेटा प्रकार का उपयोग करके विकल्प के रूप में इसका समर्थन करता है, लेकिन स्वैगर में एक समान 'प्रकार' मान नहीं है जो इसकी अनुमति देगा। –

+0

मुझे यकीन नहीं है कि आप कैसे सोचते हैं कि 'ऑब्जेक्ट' वहां मदद करेगा, जो मुझे भ्रमित करता है। – Ron

उत्तर

4

आपके प्रश्न में आप दो अलग-अलग उपयोग मामलों का वर्णन करते हैं।

पहला मिश्रित मानों के साथ एक सरणी का उपयोग है, और दूसरा एक विशिष्ट फ़ील्ड है जिसमें कोई मूल्य हो सकता है (यह एक वस्तु, आदिम और संभावित रूप से एक सरणी हो)।

स्वैगर स्पष्ट रूप से ऐसे मॉडलिंग का समर्थन नहीं करता है। इसके लिए कई कारण हैं, लेकिन वे निर्धारवाद और भाषा समर्थन पर ध्यान केंद्रित करते हैं। जबकि गतिशील भाषाएं गैर-निर्धारिती एपीआई का अधिक आसानी से समर्थन कर सकती हैं, और कमजोर टाइप की गई भाषाएं गतिशील प्रकारों का आसानी से समर्थन कर सकती हैं, अन्य भाषाओं को इसके लिए भुगतना होगा। एपीआई भाषा-स्वतंत्र होने के नाते इंटरऑपरेबिलिटी के लिए हैं, इसलिए आपको इन प्रतिबंधों पर विचार करना होगा।

जबकि स्वैगर एक प्रलेखन उपकरण के रूप में है, उपकरण के पारिस्थितिक तंत्र में ऐसे समाधान शामिल हैं जिन्हें लगभग किसी भी भाषा में ऐसे एपीआई का उत्पादन और उपभोग करने में सक्षम होना चाहिए। जाहिर है, इसमें 100% कवरेज नहीं हो सकता है, लेकिन यह ज्ञात मुद्दों से बचने का प्रयास करता है।

स्वैगर 2.0 मॉडलों को परिभाषित करने के मामले में अधिक लचीलापन जोड़ता है, यहां तक ​​कि मुक्त-फॉर्म ऑब्जेक्ट्स (और नोट - ऑब्जेक्ट्स, प्राइमेटिव्स) को अनुमति देता है।हालांकि यह किया जा अत्यधिक सामान्य रूप में इस्तेमाल करने की सलाह नहीं होता, वहाँ उपयोग मामलों में जहां यह सिर्फ टाला नहीं जा सकता है, लेकिन फिर भी दृढ़ता से टाइप भाषाओं सौदा कर सकते हैं के साथ (मैं उपयोग के मामलों पर विस्तृत सकता है, लेकिन यह कम से सवाल करने के लिए प्रासंगिक नहीं है हाथ)।

के रूप में जानकारी जोड़ा - देखने के एक दस्तावेज के बिंदु से यह के बारे में सोच है, और मैं एक उदाहरण के रूप में अपने address क्षेत्र का उपयोग करेंगे। तुम यहाँ क्या कह रहे हैं, एपीआई समझदार, उस पते क्षेत्र एक वाइल्डकार्ड है। आप इसे करने के लिए कुछ भी स्वीकार कर सकते हैं, और यह कोई पता होना करने के लिए नहीं है, एक संरचना है की जरूरत नहीं है, विशेष जानकारी नहीं है। अगर कोई चाहता है, तो वह परमाणु लॉन्च कोड स्टोर करने के लिए उस क्षेत्र का उपयोग कर सकते हैं। अब, यदि यह आपका इरादा है, तो बस फ़ील्ड को एक स्ट्रिंग मान के रूप में चिह्नित करें, और यदि कोई स्ट्रिंग के रूप में एक धारावाहिक JSON ऑब्जेक्ट भेजना चाहता है, तो यह ठीक से फिट होगा।

+0

जवाब देने के लिए समय निकालने के लिए धन्यवाद। JSON स्ट्रिंग के रूप में मानों को संग्रहीत करने का मेरा एकमात्र काउंटर यह है कि मैं उन दस्तावेज़ों के लिए क्वेरी करने की क्षमता खो देता हूं जिनमें कुछ मान होते हैं। ऊपर 'पता' उदाहरण का उपयोग करके, मैं केवल उन दस्तावेजों को वापस करने के लिए एक प्रश्न लिख सकता हूं जिनके पास '95125' का' address.postalCode' मान है। माना जाता है कि कई दस्तावेजों में कचरे के सभी प्रकार हो सकते हैं, लेकिन मोंगोज़/मोंगोडब इसका समर्थन करता है। जेएसओएन ऑब्जेक्ट को एक स्ट्रिंग में परिवर्तित करके मेरे पास संभावित मूल्यों की खोज करने की क्षमता नहीं होगी। –

+0

मैंने ऐसा नहीं कहा तुम नहीं * पार्स * एक वस्तु को JSON स्ट्रिंग, मैं कह रहा हूँ कर सकते हैं कि * एपीआई बुद्धिमान * यह अप्रासंगिक है। दो अलग करें। मैं mongodb और इसकी क्षमताओं से अच्छी तरह से परिचित हूँ। ;) – Ron

+0

अच्छा विचार। मुझे लगता है कि मुझे "स्ट्रिंग" का उपयोग 'टाइप'' के रूप में करना होगा और एक JSON स्ट्रिंग को स्वीकार करने के संकेत के लिए संपत्ति के विवरण में अतिरिक्त जानकारी शामिल होगी। एक बार फिर धन्यवाद! –

संबंधित मुद्दे