Doporučuji použít tento přístup.
Měli byste mít samostatné Schemas pro Account , Teacher a Student takže různé informace mezi učiteli a studenty by se neměly míchat na jednom místě.
Účet
var Account = new Schema({
email:String,
password:String,
_teacher:{type:Schema.Types.ObjectId, ref:'Teacher'},
_student:{type:Schema.Types.ObjectId, ref:'Student'}
})
Pod účtem byste měli odkazovat na model Učitel, pokud účet učitele jinak odkazuje na model Studenti.
Chcete-li zkontrolovat, zda Account je Teacher nebo Student stačí zkontrolovat _teacher , pokud má hodnotu, pak je to Teacher účet jinak je to student. Ale aby byla podmínka pro vás jedinečnější, zaškrtněte oba _teacher a _student .
Tento přístup vám v budoucnu ušetří spoustu refaktoringu, pokud se rozhodnete umožnit učiteli být také studentem (což není nemožné), stačí použít stejný účet a zaregistrovat se jako student. Stejně jako to, co dělá google, na účtu/e-mailu lze použít několik typů aplikací.
Učitel
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
})
Jméno
V této části se možná ptáte, proč potřebujete samostatný model pro jméno. Je to proto, že v tomto přístupu můžete použít pouze jednu route nebo endpoint nebo query k vyhledávání uživatelů ve vaší aplikaci. Když budete hledat jméno, budou dotázáni všichni studenti a učitelé se shodným výsledkem, aniž by se museli dívat do 2 různých sbírek (kolekce učitelů a sbírka studentů).
Dobrým případem použití je, že určitě budete mít administrační panel, kde můžete spravovat všechny studenty a učitele. Na tomto panelu můžete pouze jedno vyhledávací pole pro učitele i studenta.
var Name = new Schema({
firstName:String,
middleName:String,
lastName:String
})
Dobré čtení
Další tipy
Můžete také oddělit Address jako jsem to udělal se jménem zde. Důvod? Stejný účel jako u Name , možná budete chtít přidat funkci vyhledávání podle polohy nebo něco podobného.
Doufám, že to pomůže.