2013-01-07 21 views
8

मेरे पास mongo ऑब्जेक्ट है और मेरे वेब ऐप के लिए mongoose के माध्यम से इसे एक्सेस करना चाहता है। मैंने परिभाषित स्कीमा में Object उपयोगकर्ता आईडी और 3-स्तर मान संग्रहीत किया है (हाँ, शायद या नहीं)।मोंगोस परिवर्तनीय कुंजी नाम

उदा।

"user_info": { 
    "<id_value_1>": "y", 
    "<id_value_2>": "n" 
} 

id_value_* रों ऊपर उन सत्र आईडी तो यादृच्छिक पात्रों की एक लंबी स्ट्रिंग है। इसके लिए मैं mongooseSchema कैसे बना सकता हूं?

  1. user_info: {String, String} काम करेगा?

  2. मैं इसे पुन: स्थापित कर सकता हूं ताकि user_info ऑब्जेक्ट्स { "sessionid": "<value>", "value: "y"} ऑब्जेक्ट्स की एक सरणी है, जो ठीक है, क्या यह सबसे अच्छा विकल्प है?

उत्तर

8

यदि आप अपने स्कीमा में गतिशील कुंजी से बचने और के अपने दूसरे विचार के साथ जाना बेहतर हो जाएगा: उदाहरण के लिए, इस ऑब्जेक्ट की श्रृंखला है $ positional operator व्यक्तिगत user_info सरणी तत्वों को sessionid द्वारा अपडेट करने के लिए।

+0

क्या आप विस्तृत कर सकते हैं कि गतिशील कुंजी से बचने के लिए बेहतर क्यों है? क्या यह सिर्फ इसलिए है क्योंकि मोंगोज इसे संभाल नहीं सकता है? – ruX

+3

@ruX आप गतिशील कुंजी को इंडेक्स नहीं कर सकते हैं, वे क्वेरी बनाने के लिए अजीब हैं, आप उनके लिए उपयोगी मोंगोस स्कीमा परिभाषित नहीं कर सकते ... – JohnnyHK

0

ऊपर का परीक्षण करने के बाद, मैंने पाया कि user_info: { String: String } के रूप में स्कीमा को परिभाषित करने के लिए इस (विकल्प 1 प्रश्न में निर्दिष्ट) करने के लिए एक वैध तरीका है।

+0

मेरा मानना ​​है कि इस विकल्प का काम नहीं करता है, के बाद से मैं इसे बदल वेब अनुप्रयोग में विफल रहा है लागू किया है, तो @JohnnyHK –

0

आप अपनी स्कीमा में ऑब्जेक्ट्स और सरणी परिभाषित कर सकते हैं। आप उन्हें भी जोड़ सकते हैं।

user_info: [{sessionid: String, value: String}] 

आप उपयोग कर सकते हैं:

var user = new Schema({ 
    foo: [ { 
     address: {type: String}, 
     email: {type: String, unique: true} 
    }], 
    bar: [ "simple", "array" ] 
}); 
+1

से उत्तर देखें मेरा प्रश्न इस तथ्य से संबंधित था कि कुंजी के पास 'पता' जैसे साधारण नाम नहीं हैं, बल्कि कोड में कुंजी उत्पन्न होती है, लेकिन हाँ यह भाग 2 के अनुसार एक वैध तरीका है। मेरा प्रश्न –

3

आप स्कीमा प्रकार इस तरह

var user = new Schema({ 
    info: [Schema.Types.Mixed] 
}); 

user.info = { any: { thing: 'i want' } }; 
user.markModified('info'); 

आप अधिक पढ़ सकते हैं की तरह मिश्रित के साथ की कोशिश कर सकते के बारे में यह here

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