MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

modèle de mangouste pour plusieurs types d'utilisateurs

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.