यह कई-से-अनेक संबंध वाले डेटा होने का मामला है। मुझे लगता है कि आपके डेटाबेस में कुछ हज़ार छात्र और कुछ सौ पाठ्यक्रम हैं।
आरंभ करने के लिए मैं प्रत्येक छात्र के साथ एम्बेडेड पाठ्यक्रम विवरण के साथ निम्नलिखित डिज़ाइन का उपयोग उप-दस्तावेजों की एक सरणी के रूप में कर सकता हूं जिसे courses
कहा जाता है ।
- students collection
id:
name:
courses: [ { id: 1, name: }, { id: 5, name: }, ... ]
- courses collection
id:
name:
description:
ध्यान दें, पाठ्यक्रम आईडी और नाम दोनों संग्रहों में संग्रहीत हैं। यह डेटा का दोहराव है। यह ठीक होना चाहिए, क्योंकि दोहराए गए विवरण अक्सर नहीं बदलते हैं (या बिल्कुल भी नहीं बदल सकते हैं)।
एक छात्र द्वारा नामांकित सभी पाठ्यक्रमों के बारे में पूछताछ करें, उदाहरण के लिए:db.students.find( { name: "John" } )
. यह मिलान करने वाले नाम और सभी पाठ्यक्रमों (सरणी फ़ील्ड) के साथ एक छात्र दस्तावेज़ लौटाएगा। देखें db.collection.find
।
किसी विशेष पाठ्यक्रम में नामांकित सभी छात्रों से पूछताछ करें:db.students.find( { "courses.name": "Java Programming" } )
. यह उन सभी छात्र दस्तावेजों को वापस कर देगा जिनके पास "जावा प्रोग्रामिंग" मानदंड से मेल खाने वाले पाठ्यक्रम का नाम है। देखें एम्बेडेड दस्तावेज़ों की एक सरणी पूछें
।
इसके अलावा, आप प्रक्षेपण . का उपयोग कर सकते हैं बहिष्कृत करना और शामिल करना परिणाम से फ़ील्ड।
नोट्स:
- आप छात्रों में पाठ्यक्रम के बजाय पाठ्यक्रम संग्रह में छात्रों की जानकारी एम्बेड कर सकते हैं। प्रश्न उपरोक्त के समान होंगे, लेकिन आप पाठ्यक्रम संग्रह को क्वेरी कर रहे होंगे। यह आपके उपयोग के मामले पर निर्भर करता है।
- आप केवल छात्र संग्रह के पाठ्यक्रम आईडी फ़ील्ड को पाठ्यक्रम सरणी में संग्रहीत कर सकते हैं; यह वह मामला है जहां आपके पास पाठ्यक्रम का नाम फ़ील्ड अक्सर बदलता रहता है। क्वेरीज़ में एग्रीगेशन $lookup का इस्तेमाल किया जाएगा। (एक "जॉइन" ऑपरेशन) पाठ्यक्रम और पाठ्यक्रम संग्रह से प्राप्त करने के लिए।
- डेटा मॉडल डिज़ाइन पर जानकारी दस्तावेज़ आधारित MongoDB डेटा के लिए।