Suggerisco di utilizzare questo approccio.
Dovresti avere uno Schemas
separato per Account
, Teacher
e Student
quindi le diverse informazioni tra insegnanti e studenti non dovrebbero essere mescolate in un unico posto.
Account
var Account = new Schema({
email:String,
password:String,
_teacher:{type:Schema.Types.ObjectId, ref:'Teacher'},
_student:{type:Schema.Types.ObjectId, ref:'Student'}
})
In account, dovresti fare riferimento al modello Insegnante se l'account insegnante fa altrimenti riferimento al modello Studenti.
Per verificare se Account
è Teacher
o Student
potresti semplicemente controllare _teacher
, se ha un valore allora è un Teacher
conto altrimenti è uno studente. Ma per rendere la condizione più unica, controlla entrambi _teacher
e _student
.
Questo approccio ti farà risparmiare un sacco di refactoring in futuro se deciderai di consentire anche all'insegnante di essere uno studente (cosa non impossibile), lui/lei potrà semplicemente usare lo stesso account e registrarsi come studente. Proprio come sta facendo Google, su account/e-mail più tipi di app da utilizzare.
Insegnante
var Teacher = new Schema({
name:{type:Schema.Types.ObjectId, ref:'Name'}
// Other teachers info
})
Studente
var Student = new Schema({
name:{type:Schema.Types.ObjectId, ref:'Name'}
// Other students info
})
Nome
Da questa parte forse ti starai chiedendo perché hai bisogno di un modello separato per il nome. Bene, questo perché in questo approccio puoi usare solo un route
o endpoint
o query
per cercare utenti nella tua app. Quando cerchi un nome, tutti gli studenti e gli insegnanti con risultati corrispondenti verranno interrogati senza esaminare 2 raccolte diverse (Collezione Insegnante e Collezione Studente).
Un buon caso d'uso per questo è sicuramente che avrai una dashboard di amministrazione in cui puoi gestire tutti gli studenti e gli insegnanti. In quella dashboard puoi solo un campo di ricerca sia per l'insegnante che per lo studente.
var Name = new Schema({
firstName:String,
middleName:String,
lastName:String
})
Buone letture
Altri suggerimenti
Puoi anche separare l'Address
come ho fatto con il nome qui. Motivo? Stesso scopo del Name
, potresti voler aggiungere la funzione di ricerca per posizione o qualcosa del genere.
Spero che questo aiuti.