MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mungo-Modell für mehrere Arten von Benutzern

Ich schlage vor, diesen Ansatz zu verwenden.

Sie sollten separate Schemas haben für Account , Teacher und Student Daher sollten die unterschiedlichen Informationen zwischen Lehrern und Schülern nicht an einem Ort gemischt werden.

Konto

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

Unter Konto sollten Sie auf das Lehrermodell verweisen, wenn das Lehrerkonto andernfalls auf das Schülermodell verweist.

Um zu überprüfen, ob Account ist Teacher oder Student Sie könnten einfach _teacher überprüfen , wenn es einen Wert hat, dann ist es ein Teacher Konto sonst ist es ein Student. Aber um die Bedingung für Sie einzigartiger zu machen, überprüfen Sie beide _teacher und _student .

Dieser Ansatz erspart Ihnen in Zukunft eine Menge Refactoring, wenn Sie sich entscheiden, dem Lehrer zu erlauben, auch ein Schüler zu sein (was nicht unmöglich ist), kann er/sie einfach dasselbe Konto verwenden und sich als Schüler registrieren. Genau wie Google es tut, auf Rechnung/E-Mail mehrere Arten von Apps zu verwenden.

Lehrer

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

Schüler

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

Name

In diesem Teil fragen Sie sich vielleicht, warum Sie ein separates Modell für den Namen benötigen. Nun, das liegt daran, dass Sie bei diesem Ansatz nur eine route verwenden können oder endpoint oder query um Benutzer in Ihrer App zu suchen. Wenn Sie nach einem Namen suchen, werden alle Schüler und Lehrer mit übereinstimmenden Ergebnissen abgefragt, ohne dass in 2 verschiedenen Sammlungen (Lehrersammlung und Schülersammlung) nachgesehen wird.

Ein guter Anwendungsfall dafür ist, dass Sie mit Sicherheit ein Admin-Dashboard haben, in dem Sie alle Schüler und Lehrer verwalten können. In diesem Dashboard können Sie nur ein Suchfeld für Lehrer und Schüler verwenden.

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

Gute Lektüre

Weitere Tipps

Sie können die Address auch trennen wie ich es mit dem Namen hier getan habe. Grund? Gleicher Zweck wie beim Name , möchten Sie vielleicht die Funktion „Suche nach Standort“ oder ähnliches hinzufügen.

Ich hoffe, das hilft.