2013-07-05 8 views
20

मेरे मोंगोस स्कीमा में, मेरे पास एक फ़ील्ड है जो एक स्ट्रिंग है, और मैं इसमें एक JSON ऑब्जेक्ट स्टोर करने में सक्षम होना चाहता हूं। क्या यह संभव है? पोस्टग्रेज़ में, एक स्ट्रिंग कॉलम में एक शब्दकोश को स्टोर करना संभव है।मोंगोस स्ट्रिंग कुंजी में जेसन ऑब्जेक्ट को संग्रहीत करना

मैं ऐसा करना चाहता हूं क्योंकि शब्दकोश (वास्तव में जेएस में एक JSON ऑब्जेक्ट) सिर्फ एक साधारण पठन और लिखने का मूल्य है और प्रश्नों की आवश्यकता नहीं है, बल्कि यह भी, क्योंकि यह केवल एक मान है और मूल्यों की सरणी नहीं है ।

उत्तर

66

हां, आप बस {myJsonProperty: JSON.stringify(myObject)} स्टोर कर सकते हैं। उम्मीद है कि आप जानते हैं कि आप अपने mongoose स्कीमा में केवल {myJsonProperty: Object} सेट कर सकते हैं और बिना किसी कारण के स्ट्रिंग में परिवर्तित किए बिना पूरे ऑब्जेक्ट को स्टोर कर सकते हैं। इसे स्कीमा के साथ घोंसला वाला दस्तावेज़ नहीं होना चाहिए, यह सिर्फ एक सादा जावास्क्रिप्ट ऑब्जेक्ट हो सकता है।

+5

मैं बस एक वस्तु स्टोर कर सकता हूं? क्या आपको यकीन है? यह मेरे लिए आदर्श होगा लेकिन मोंगोस डॉक्स उस प्रकार का उल्लेख नहीं करता है। –

+7

हां। यदि आप सच कुछ भी चाहते हैं तो आप 'मिश्रित' प्रकार का भी उपयोग कर सकते हैं। https://github.com/LearnBoost/mongoose/blob/3.6.14/lib/schema/mixed.js –

+0

क्या मुझे मिश्रित या ऑब्जेक्ट का उपयोग करना चाहिए। असल में मैं एक JSON ऑब्जेक्ट को स्टोर करना चाहता हूं। तो बेहतर क्या होगा? –

0

स्वीकार्य उत्तर अधिकांश स्थितियों के लिए अच्छा है।

हालांकि, यदि आपके पास कोई ऑब्जेक्ट है जिसे आप स्टोर करना चाहते हैं, और आपके पास ऑब्जेक्ट कुंजियों पर कोई नियंत्रण नहीं है (उदा। वे उपयोगकर्ता द्वारा सबमिट किए जा सकते हैं), तो आप इन्हें स्ट्रिंग किए गए JSON के रूप में संग्रहीत करने पर विचार करना चाहेंगे। यह आपको मोंगोडीबी द्वारा लगाई गई सीमा को दूर करने की अनुमति देता है कि keys must not contain the reserved characters$ या .

आप उदाहरण के लिए, इस नेवला getters और setters का उपयोग कर प्राप्त कर सकते हैं:

data: { 
    type: String, 
    get: function(data) { 
    try { 
     return JSON.parse(data); 
    } catch() { 
     return data; 
    } 
    }, 
    set: function(data) { 
    return JSON.stringify(data); 
    } 
} 
6

आप अपने क्षेत्र प्रपत्र "STRING" के प्रकार बदलने के "ऑब्जेक्ट" आप json बचा सकते हैं करने के लिए के रूप में यह है सकते हैं।

var schema_obj = new Schema({ 
field1: Object, 
.. 
}); 
संबंधित मुद्दे