MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

modello mangusta per più tipi di utenti

Suggerisco di utilizzare questo approccio.

Dovresti avere uno Schemas separato per Account , Teacher e Student quindi le diverse informazioni tra insegnanti e studenti non dovrebbero essere mescolate in un unico posto.

Account

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

In account, dovresti fare riferimento al modello Insegnante se l'account insegnante fa altrimenti riferimento al modello Studenti.

Per verificare se Account è Teacher o Student potresti semplicemente controllare _teacher , se ha un valore allora è un Teacher conto altrimenti è uno studente. Ma per rendere la condizione più unica, controlla entrambi _teacher e _student .

Questo approccio ti farà risparmiare un sacco di refactoring in futuro se deciderai di consentire anche all'insegnante di essere uno studente (cosa non impossibile), lui/lei potrà semplicemente usare lo stesso account e registrarsi come studente. Proprio come sta facendo Google, su account/e-mail più tipi di app da utilizzare.

Insegnante

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

Studente

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

Nome

Da questa parte forse ti starai chiedendo perché hai bisogno di un modello separato per il nome. Bene, questo perché in questo approccio puoi usare solo un route o endpoint o query per cercare utenti nella tua app. Quando cerchi un nome, tutti gli studenti e gli insegnanti con risultati corrispondenti verranno interrogati senza esaminare 2 raccolte diverse (Collezione Insegnante e Collezione Studente).

Un buon caso d'uso per questo è sicuramente che avrai una dashboard di amministrazione in cui puoi gestire tutti gli studenti e gli insegnanti. In quella dashboard puoi solo un campo di ricerca sia per l'insegnante che per lo studente.

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

Buone letture

Altri suggerimenti

Puoi anche separare l'Address come ho fatto con il nome qui. Motivo? Stesso scopo del Name , potresti voler aggiungere la funzione di ricerca per posizione o qualcosa del genere.

Spero che questo aiuti.