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.