sql >> Databasteknik >  >> NoSQL >> MongoDB

mongoose modell för flera typer av användare

Jag föreslår att du använder detta tillvägagångssätt.

Du bör ha ett separat Schemas för Account , Teacher och Student så den olika informationen mellan lärare och elever ska inte blandas på ett ställe.

Konto

var Account = new Schema({
    email:String,
    password:String,
    _teacher:{type:Schema.Types.ObjectId, ref:'Teacher'},
    _student:{type:Schema.Types.ObjectId, ref:'Student'}
})

Under konto bör du referera till Lärarmodellen om lärarkontot annars refererar till Studentmodell.

För att kontrollera om Account är Teacher eller Student du kan bara kontrollera _teacher , om det har ett värde så är det en Teacher konto annars är det en student. Men för att göra villkoret mer unikt för dig, kontrollera båda _teacher och _student .

Det här tillvägagångssättet kommer att bespara dig en hel del omfaktorer i framtiden om du beslutar dig för att låta läraren vara student också (vilket inte är omöjligt att hända), han/hon kan bara använda samma konto och registrera sig som student. Precis som vad google gör, på konto/e-post flera typer av appar att använda.

Lärare

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
})

Namn

På den här delen kanske du undrar varför du behöver en separat modell för namn. Jo det beror på att i detta tillvägagångssätt kan du bara använda en route eller endpoint eller query för att söka efter användare i din app. När du söker efter ett namn kommer alla elever och lärare med matchande resultat att frågas utan att titta på två olika samlingar (lärarsamling och elevsamling).

Ett bra exempel på detta är att du säkert kommer att ha en administratörspanel där du kan hantera alla elever och lärare. I den instrumentpanelen kan du bara ett sökfält för både lärare och elev.

var Name = new Schema({
    firstName:String,
    middleName:String,
    lastName:String
})

Bra läsning

Andra tips

Du kan också separera Address som jag gjorde med namnet här. Anledning? Samma syfte som med Name , kanske du vill lägga till sökfunktionen efter plats eller något liknande.

Jag hoppas att detta hjälper.



  1. Python-ordbok:ta bort u' tecken

  2. Deserialisering av polymorfa typer med MongoDB C#-drivrutin

  3. Beräkna första ordningens derivata med MongoDB aggregeringsramverk

  4. Vad gör jag för fel när jag manipulerar data i Meteor/MongoDB?