sql >> Database >  >> NoSQL >> MongoDB

mangoestmodel voor meerdere soorten gebruikers

Ik stel voor om deze aanpak te gebruiken.

Je zou een apart Schemas moeten hebben voor Account , Teacher en Student dus de verschillende informatie tussen de docenten en studenten mag niet op één plek worden gemengd.

Account

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

Onder account moet u verwijzen naar het docentenmodel als het docentenaccount anders naar het studentenmodel verwijst.

Om te controleren of Account is Teacher of Student je zou gewoon _teacher . kunnen aanvinken , als het een waarde heeft, dan is het een Teacher account, anders is het een student. Maar om de voorwaarde voor jou unieker te maken, vink je beide _teacher . aan en _student .

Deze aanpak zal je in de toekomst veel refactoring besparen als je besluit om de leraar ook student te laten zijn (wat niet onmogelijk is), hij/zij kan gewoon hetzelfde account gebruiken en zich als student registreren. Net zoals wat Google doet, op account/e-mail meerdere soorten apps om te gebruiken.

Leraar

var Teacher = new Schema({
    name:{type:Schema.Types.ObjectId, ref:'Name'}
    // Other teachers info
})

Leerling

var Student = new Schema({
    name:{type:Schema.Types.ObjectId, ref:'Name'}
    // Other students info
})

Naam

Op dit onderdeel vraag je je misschien af ​​waarom je een apart model voor naam nodig hebt. Nou, dat komt omdat je in deze benadering maar één route . kunt gebruiken of endpoint of query om gebruikers in uw app te zoeken. Als je op een naam zoekt, worden alle leerlingen en docenten met een overeenkomend resultaat bevraagd zonder in 2 verschillende collecties te kijken (lerarencollectie en leerlingencollectie).

Een goed gebruik hiervoor is dat je zeker een beheerdersdashboard hebt waar je alle studenten en docenten kunt beheren. In dat dashboard kun je maar één zoekveld vinden voor zowel docent als student.

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

Goed gelezen

Andere tips

U kunt ook het Address . scheiden zoals ik deed met de naam hier. Reden? Zelfde doel als bij de Name , wilt u misschien een functie voor zoeken op locatie of iets dergelijks toevoegen.

Ik hoop dat dit helpt.



  1. Vind geneste SubDocument MongoDB op n-niveau

  2. De strijd om de NoSQL-databases - MongoDB en Firebase vergelijken

  3. MongoDB:Niet geautoriseerd op admin om commando uit te voeren

  4. Waarom voegt mangoest altijd een s toe aan het einde van mijn verzamelingsnaam?