MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

model mangusty dla wielu typów użytkowników

Proponuję skorzystać z tego podejścia.

Powinieneś mieć oddzielne Schemas dla Account , Teacher i Student więc różne informacje między nauczycielami i uczniami nie powinny być mieszane w jednym miejscu.

Konto

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

W ramach konta należy odwoływać się do modelu Nauczyciela, jeśli konto nauczyciela w inny sposób odwołuje się do modelu Uczniów.

Aby sprawdzić, czy Account jest Teacher lub Student możesz po prostu sprawdzić _teacher , jeśli ma wartość, to jest Teacher konto inaczej to student. Ale aby warunek był bardziej unikalny, sprawdź oba _teacher i _student .

Takie podejście zaoszczędzi ci wielu refaktoryzacji w przyszłości, jeśli zdecydujesz się pozwolić nauczycielowi być również uczniem (co nie jest niemożliwe), może on po prostu użyć tego samego konta i zarejestrować się jako uczeń. Podobnie jak to, co robi Google, na koncie / e-mailu można używać wielu typów aplikacji.

Nauczyciel

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

Nazwa

Być może w tej części zastanawiasz się, dlaczego potrzebujesz osobnego modelu na nazwę. Cóż, to dlatego, że w tym podejściu możesz użyć tylko jednej route lub endpoint lub query do wyszukiwania użytkowników w Twojej aplikacji. Podczas wyszukiwania imienia i nazwiska wszyscy uczniowie i nauczyciele z pasującymi wynikami zostaną zapytani bez przeszukiwania 2 różnych kolekcji (kolekcji nauczycieli i kolekcji uczniów).

W dobrym przypadku jest to, że na pewno będziesz miał pulpit administratora, w którym możesz zarządzać wszystkimi uczniami i nauczycielami. W tym panelu możesz tylko jedno pole wyszukiwania dla nauczyciela i ucznia.

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

Dobre lektury

Inne wskazówki

Możesz także oddzielić Address tak jak ja z nazwą tutaj. Powód? Taki sam cel jak w przypadku Name , możesz dodać funkcję wyszukiwania według lokalizacji lub coś podobnego.

Mam nadzieję, że to pomoże.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Prototyp Mongoose:jak dynamicznie wstawić adres URL?

  2. Bson ładny wydruk przy użyciu sterownika Java MongoDb

  3. Mongo Zapytanie w wielu polach poddokumentu

  4. Suma agregacji w Spring Data MongoDB

  5. Wydajność MongoDB - ile baz danych, kolekcji?