Jag föreslår att du använder detta tillvägagångssätt.
Du bör ha ett separat Schemas
för Account
, Teacher
och Student
så den olika informationen mellan lärare och elever ska inte blandas på ett ställe.
Konto
var Account = new Schema({
email:String,
password:String,
_teacher:{type:Schema.Types.ObjectId, ref:'Teacher'},
_student:{type:Schema.Types.ObjectId, ref:'Student'}
})
Under konto bör du referera till Lärarmodellen om lärarkontot annars refererar till Studentmodell.
För att kontrollera om Account
är Teacher
eller Student
du kan bara kontrollera _teacher
, om det har ett värde så är det en Teacher
konto annars är det en student. Men för att göra villkoret mer unikt för dig, kontrollera båda _teacher
och _student
.
Det här tillvägagångssättet kommer att bespara dig en hel del omfaktorer i framtiden om du beslutar dig för att låta läraren vara student också (vilket inte är omöjligt att hända), han/hon kan bara använda samma konto och registrera sig som student. Precis som vad google gör, på konto/e-post flera typer av appar att använda.
Lärare
var Teacher = new Schema({
name:{type:Schema.Types.ObjectId, ref:'Name'}
// Other teachers info
})
Student
var Student = new Schema({
name:{type:Schema.Types.ObjectId, ref:'Name'}
// Other students info
})
Namn
På den här delen kanske du undrar varför du behöver en separat modell för namn. Jo det beror på att i detta tillvägagångssätt kan du bara använda en route
eller endpoint
eller query
för att söka efter användare i din app. När du söker efter ett namn kommer alla elever och lärare med matchande resultat att frågas utan att titta på två olika samlingar (lärarsamling och elevsamling).
Ett bra exempel på detta är att du säkert kommer att ha en administratörspanel där du kan hantera alla elever och lärare. I den instrumentpanelen kan du bara ett sökfält för både lärare och elev.
var Name = new Schema({
firstName:String,
middleName:String,
lastName:String
})
Bra läsning
Andra tips
Du kan också separera Address
som jag gjorde med namnet här. Anledning? Samma syfte som med Name
, kanske du vill lägga till sökfunktionen efter plats eller något liknande.
Jag hoppas att detta hjälper.