2013-06-25 7 views
9

मेरे पास एक दस्तावेज़ "मालिक" है जिसमें "एन" शिविरों और शिविरों की संख्या "प्रशिक्षकों" हो सकती है और प्रशिक्षकों के पास "कक्षाएं" होती हैं। इससे पहले मैंने इसे नेस्टेड एरे के साथ पूरा करने की कोशिश की (नीचे मेरी पोस्ट के लिंक देखें), हालांकि मैंने सीखा कि स्थितित्मक ऑपरेटर "$" उस गहरे घोंसले को नहीं देखता है। MongoDB: Adding an array into an existing arrayMongoDb: ऑब्जेक्ट संग्रह में अतिरिक्त ऑब्जेक्ट कैसे सम्मिलित करें?

हालांकि, मैंने सीखा कि वर्कअराउंड सरणी के बजाय ऑब्जेक्ट संग्रह का उपयोग करना होगा। मुझे लगता है कि मुझे अतिरिक्त "शिविर" जोड़ने के लिए "$" के साथ "अपडेट" का उपयोग करना होगा, हालांकि हर बार जब मैं ऐसा करता हूं तो पिछले कैंप को ओवरराइट (अपडेट) करता है।

owner = { 

    firstName: 'john', 
    lastName: 'smith', 
    ownerEmail: '[email protected]', 

    camps : { 

     { 
      name: 'cubs-killeen', 
      location: 'killeen' 
     }, 

     { 
      name: 'cubs-temple', 
      location: 'temple' 
     }, 

     instructors : { 

      { 
       firstName: 'joe', 
       lastName : 'black' 
      }, 

      { 
       firstName: 'will', 
       lastName : 'smith' 
      }   
     } 

    } 

} 

मैं भी निम्नलिखित कोशिश कर रहे हैं:

नीचे सौपानिक संरचना मैं पूरा करने के लिए कोशिश कर रहा हूँ है

db.owners.update({ownerEmail:'[email protected]'}, {$set: { camps:{ {name:'cubs-killeen'} } }}) 

लेकिन यह एक अप्रत्याशित पहचानकर्ता {त्रुटि फेंकता है।

उपरोक्त संरचना को प्राप्त करने के लिए कुछ नमूना मोंगो आदेशों के साथ कोई भी सहायता सबसे सराहना की जाएगी।

वी/आर

क्रिस

+1

वे वैध दस्तावेज नहीं हैं। आप अज्ञात नेस्टेड ऑब्जेक्ट्स नहीं कर सकते हैं जैसे कि आप 'शिविर' और 'प्रशिक्षकों' के साथ करने की कोशिश कर रहे हैं। – JohnnyHK

+1

क्या आपका मतलब 'शिविर: {नाम:' शावक-किलेन '} 'शिविरों के बजाय: {{name:' cubs-killeen '}}'? –

+0

@Relfor, हाँ यही मेरा मतलब था! स्पष्टीकरण देने के लिए धन्यवाद। अब, उस दस्तावेज़ संरचना को कैसे प्राप्त करें? – cpeele00

उत्तर

18

अन्य के रूप में उल्लेख किया है, संरचना आप चाहते हैं मान्य नहीं है। मैं अपने मालिक दस्तावेज़ के लिए निम्नलिखित संरचना की सिफारिश:

{ 
    "_id" : ObjectId("51c9cf2b206dfb73d666ae07"), 
    "firstName" : "john", 
    "lastName" : "smith", 
    "ownerEmail" : "[email protected]", 
    "camps" : [ 
      { 
        "name" : "cubs-killeen", 
        "location" : "killeen" 
      }, 
      { 
        "name" : "cubs-temple", 
        "location" : "temple" 
      } 
    ], 
    "instructors" : [ 
      { 
        "firstName" : "joe", 
        "lastName" : "black" 
      }, 
      { 
        "firstName" : "will", 
        "lastName" : "smith" 
      } 
    ] 
} 

और फिर

db.stack.update(
    { ownerEmail: "[email protected]" }, 
    { 
    $push: { 
     camps: { name: "cubs-killeen", location: "some other Place" } 
    } 
    } 
); 

इस के बाद, आप इस तरह के शिविरों में जोड़ सकते हैं:

आशा है कि यह मदद करता है।

+0

हमम, मैं एक प्रशिक्षक को शिविर के साथ कैसे जोड़ूं? और फिर प्रशिक्षक के साथ कक्षाएं (क्योंकि विभिन्न प्रशिक्षु विभिन्न कक्षाएं पढ़ते हैं)? यह दृष्टिकोण मोंगो के रिच दस्तावेज़ लाभों से एक तरीका लेता प्रतीत होता है। शायद मुझे सिर्फ मोंगोस का उपयोग करना चाहिए और इसे एक रिश्तेदार तरीके से डिजाइन करना चाहिए। उत्तर के लिए धन्यवाद :-) – cpeele00

+2

तो, एक शिविर में कई प्रशिक्षकों हो सकते हैं? उस स्थिति में, बस "शिविर" में प्रत्येक शिविर के अंदर "प्रशिक्षकों" सूची डालें। आप इसे इस तरह सादगी के लिए तारों की एक सरणी बना सकते हैं: '" प्रशिक्षकों ": [" जो ब्लैक "," विल स्मिथ "," कुछ अन्य "]'। यदि आप प्रशिक्षकों के बारे में अधिक जानकारी स्टोर करना चाहते हैं तो बस एक नया संग्रह "प्रशिक्षकों" बनाएं और नाम आईडी हो। '{" _id ":" जो ब्लैक "," आयु ": 21," फोन ":" 123 "}'। सरलता पर सोचने का प्रयास करें और रिलेशनल पर विचार करने से पहले आपके डेटा की पूछताछ कैसे की जाएगी। NoSQL (NoRelational) आपके दिमाग में पकड़ना मुश्किल है लेकिन जब आप करते हैं तो यह वापस भुगतान करता है। – AntonioOtero

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