Je suggère d'utiliser cette approche.
Vous devriez avoir un Schemas
séparé pour Account
, Teacher
et Student
Ainsi, les différentes informations entre les enseignants et les étudiants ne doivent pas être mélangées au même endroit.
Compte
var Account = new Schema({
email:String,
password:String,
_teacher:{type:Schema.Types.ObjectId, ref:'Teacher'},
_student:{type:Schema.Types.ObjectId, ref:'Student'}
})
Sous compte, vous devez référencer le modèle Enseignant si le compte de l'enseignant fait référence au modèle Étudiants.
Pour vérifier si Account
est Teacher
ou Student
vous pouvez simplement vérifier _teacher
, s'il a une valeur alors c'est un Teacher
compte sinon c'est un étudiant. Mais pour rendre la condition plus unique, vérifiez à la fois _teacher
et _student
.
Cette approche vous évitera beaucoup de refactoring à l'avenir si vous décidez d'autoriser l'enseignant à être également étudiant (ce qui n'est pas impossible), il peut simplement utiliser le même compte et s'inscrire en tant qu'étudiant. Tout comme ce que fait Google, sur compte/e-mail plusieurs types d'applications à utiliser.
Professeur
var Teacher = new Schema({
name:{type:Schema.Types.ObjectId, ref:'Name'}
// Other teachers info
})
Étudiant
var Student = new Schema({
name:{type:Schema.Types.ObjectId, ref:'Name'}
// Other students info
})
Nom
Sur cette partie, vous vous demandez peut-être pourquoi vous avez besoin d'un modèle distinct pour le nom. Eh bien, c'est parce que dans cette approche, vous ne pouvez utiliser qu'un seul route
ou endpoint
ou query
pour rechercher des utilisateurs dans votre application. Lorsque vous recherchez un nom, tous les étudiants et enseignants avec un résultat correspondant seront interrogés sans rechercher dans 2 collections différentes (collection Enseignant et collection Étudiant).
Dans un bon cas d'utilisation, vous aurez certainement un tableau de bord d'administration où vous pourrez gérer tous les étudiants et enseignants. Dans ce tableau de bord, vous ne pouvez rechercher qu'un seul champ pour l'enseignant et l'élève.
var Name = new Schema({
firstName:String,
middleName:String,
lastName:String
})
Bonnes lectures
Autres conseils
Vous pouvez également séparer l'Address
comme je l'ai fait avec le nom ici. Raison? Même objectif que pour le Name
, vous voudrez peut-être ajouter une fonction de recherche par emplacement ou quelque chose comme ça.
J'espère que cela vous aidera.