MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

बहु-प्रकार के उपयोगकर्ताओं के लिए नेवला मॉडल

मेरा सुझाव है कि इस दृष्टिकोण का उपयोग करें।

आपके पास एक अलग Schemas होना चाहिए Account . के लिए , Teacher और Student इसलिए शिक्षकों और छात्रों के बीच की अलग-अलग जानकारी को एक जगह नहीं मिलाना चाहिए।

खाता

var Account = new Schema({
    email:String,
    password:String,
    _teacher:{type:Schema.Types.ObjectId, ref:'Teacher'},
    _student:{type:Schema.Types.ObjectId, ref:'Student'}
})

खाते के तहत, आपको शिक्षक मॉडल का संदर्भ देना चाहिए यदि शिक्षक खाता अन्यथा छात्र मॉडल का संदर्भ देता है।

यह जांचने के लिए कि क्या Account Teacher है या Student आप बस _teacher की जांच कर सकते हैं , यदि इसका कोई मान है तो यह एक Teacher है खाता नहीं तो यह एक छात्र है। लेकिन स्थिति को और अधिक विशिष्ट बनाने के लिए, _teacher . दोनों की जांच करें और _student .

यह दृष्टिकोण आपको भविष्य में बहुत सारे रिफैक्टरिंग से बचाएगा यदि आप शिक्षक को भी एक छात्र होने की अनुमति देने का निर्णय लेते हैं (जो कि होना असंभव नहीं है), वह सिर्फ उसी खाते का उपयोग कर सकता है और एक छात्र के रूप में पंजीकरण कर सकता है। ठीक वैसे ही जैसे Google कर रहा है, खाते/ईमेल पर उपयोग करने के लिए कई प्रकार के ऐप।

शिक्षक

var Teacher = new Schema({
    name:{type:Schema.Types.ObjectId, ref:'Name'}
    // Other teachers info
})

विद्यार्थी

var Student = new Schema({
    name:{type:Schema.Types.ObjectId, ref:'Name'}
    // Other students info
})

नाम

इस हिस्से पर शायद आप सोच रहे होंगे कि आपको नाम के लिए एक अलग मॉडल की आवश्यकता क्यों है। ऐसा इसलिए है क्योंकि इस दृष्टिकोण में आप केवल एक route . का उपयोग कर सकते हैं या endpoint या query अपने ऐप में उपयोगकर्ताओं को खोजने के लिए। जब आप कोई नाम खोजते हैं, तो मिलान परिणाम वाले सभी छात्रों और शिक्षकों से 2 अलग-अलग संग्रह (शिक्षक संग्रह और छात्र संग्रह) को देखे बिना पूछताछ की जाएगी।

इसके लिए अच्छे उपयोग के मामले में, निश्चित रूप से आपके पास एक व्यवस्थापक डैशबोर्ड होगा जहां आप सभी छात्रों और शिक्षकों को प्रबंधित कर सकते हैं। उस डैशबोर्ड में आप शिक्षक और छात्र दोनों के लिए केवल एक खोज फ़ील्ड कर सकते हैं।

var Name = new Schema({
    firstName:String,
    middleName:String,
    lastName:String
})

अच्छा पढ़ा

अन्य टिप्स

आप Address . को भी अलग कर सकते हैं जैसा मैंने यहां नाम के साथ किया था। कारण? Name . के समान उद्देश्य , हो सकता है कि आप स्थान के आधार पर खोज सुविधा या ऐसा ही कुछ जोड़ना चाहें.

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. स्क्रैपी और मोंगोडीबी के साथ वेब स्क्रैपिंग

  2. क्या नेवला मोंगोडब `findAndModify` पद्धति का समर्थन करता है?

  3. एकल दस्तावेज़ स्ट्रिंग सरणी फ़ील्ड के साथ सर्वर साइड पेजिनेशन

  4. एक MongoDB दस्तावेज़ के _id को कैसे अपडेट करें?

  5. स्प्रिंग डेटा:MongoDB दस्तावेज़ में अद्वितीय फ़ील्ड