Jeg foreslår, at du bruger denne tilgang.
Du bør have et separat Schemas
for Account
, Teacher
og Student
så de forskellige oplysninger mellem lærere og elever bør ikke blandes ét sted.
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 skal du referere til lærermodellen, hvis lærerkontoen ellers refererer til elevmodellen.
For at kontrollere, om Account
er Teacher
eller Student
du kunne bare tjekke _teacher
, hvis det har en værdi, så er det en Teacher
konto ellers er det en studerende. Men for at gøre tilstanden mere unik for dig, tjek begge _teacher
og _student
.
Denne tilgang vil spare dig for en masse refaktorering i fremtiden, hvis du beslutter dig for også at give læreren lov til at være elev (hvilket ikke er umuligt), han/hun kan bare bruge den samme konto og registrere sig som elev. Ligesom hvad google gør, på konto/e-mail flere typer app at bruge.
Lærer
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
})
Navn
På denne del undrer du dig måske over, hvorfor du har brug for en separat model til navnet. Nå, det er fordi i denne tilgang kan du bare bruge én route
eller endpoint
eller query
at søge efter brugere på tværs af din app. Når du søger efter et navn, vil alle elever og lærere med matchende resultater blive forespurgt uden at se på 2 forskellige samlinger (Lærersamling og Elevsamling).
Et godt eksempel på dette er, at du helt sikkert vil have et admin-dashboard, hvor du kan administrere alle elever og lærere. I det dashboard kan du kun ét søgefelt for både lærer og elev.
var Name = new Schema({
firstName:String,
middleName:String,
lastName:String
})
God læsning
Andre tips
Du kan også adskille Address
som jeg gjorde med navnet her. Grund? Samme formål som med Name
, vil du måske tilføje søgning efter placering eller noget lignende.
Jeg håber, at dette hjælper.