sql >> Databáze >  >> NoSQL >> MongoDB

mongoose model pro více typů uživatelů

Doporučuji použít tento přístup.

Měli byste mít samostatné Schemas pro Account , Teacher a Student takže různé informace mezi učiteli a studenty by se neměly míchat na jednom místě.

Účet

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

Pod účtem byste měli odkazovat na model Učitel, pokud účet učitele jinak odkazuje na model Studenti.

Chcete-li zkontrolovat, zda Account je Teacher nebo Student stačí zkontrolovat _teacher , pokud má hodnotu, pak je to Teacher účet jinak je to student. Ale aby byla podmínka pro vás jedinečnější, zaškrtněte oba _teacher a _student .

Tento přístup vám v budoucnu ušetří spoustu refaktoringu, pokud se rozhodnete umožnit učiteli být také studentem (což není nemožné), stačí použít stejný účet a zaregistrovat se jako student. Stejně jako to, co dělá google, na účtu/e-mailu lze použít několik typů aplikací.

Učitel

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

Jméno

V této části se možná ptáte, proč potřebujete samostatný model pro jméno. Je to proto, že v tomto přístupu můžete použít pouze jednu route nebo endpoint nebo query k vyhledávání uživatelů ve vaší aplikaci. Když budete hledat jméno, budou dotázáni všichni studenti a učitelé se shodným výsledkem, aniž by se museli dívat do 2 různých sbírek (kolekce učitelů a sbírka studentů).

Dobrým případem použití je, že určitě budete mít administrační panel, kde můžete spravovat všechny studenty a učitele. Na tomto panelu můžete pouze jedno vyhledávací pole pro učitele i studenta.

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

Dobré čtení

Další tipy

Můžete také oddělit Address jako jsem to udělal se jménem zde. Důvod? Stejný účel jako u Name , možná budete chtít přidat funkci vyhledávání podle polohy nebo něco podobného.

Doufám, že to pomůže.



  1. Ověření rmongodb vždy selže

  2. Redis:Jak protnout normální množinu se setříděnou množinou?

  3. Jak se MongoDB liší od databáze SQL

  4. při připojování k serveru mongodb dostávám následující chybu