मेरा सुझाव है कि इस दृष्टिकोण का उपयोग करें।
आपके पास एक अलग 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
. के समान उद्देश्य , हो सकता है कि आप स्थान के आधार पर खोज सुविधा या ऐसा ही कुछ जोड़ना चाहें.
मुझे आशा है कि यह मदद करता है।