MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

модел mongoose за различни типове потребители

Предлагам да използвате този подход.

Трябва да имате отделни Schemas за Account , Teacher и Student така че различната информация между учители и ученици не трябва да се смесва на едно място.

Акаунт

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

Под акаунт трябва да се позовавате на модела на учителя, ако в противен случай акаунтът на учителя се позовава на модела на учениците.

За да проверите дали Account е Teacher или Student можете просто да проверите _teacher , ако има стойност, това е Teacher акаунт иначе е студент. Но за да направите условието по-уникално, проверете и двете _teacher и _student .

Този подход ще ви спести много рефакторинг в бъдеще, ако решите да позволите на учителя да бъде и ученик (което не е невъзможно да се случи), той/тя може просто да използва същия акаунт и да се регистрира като ученик. Точно като това, което Google прави, в акаунт/имейл множество типове приложения за използване.

Учител

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

Студент

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

Име

В тази част може би се чудите защо имате нужда от отделен модел за име. Ами това е така, защото при този подход можете да използвате само един route или endpoint или query за търсене на потребители в приложението ви. Когато търсите име, всички ученици и учители със съвпадащ резултат ще бъдат запитвани, без да се разглеждат 2 различни колекции (колекция от учители и колекция от ученици).

При добър случай на използване за това със сигурност ще имате табло за администратори, където можете да управлявате всички ученици и учители. В това табло можете да използвате само едно поле за търсене както за учител, така и за ученик.

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

Добро четене

Други съвети

Можете също да отделите Address както направих с името тук. причина? Същата цел като с Name , може да искате да добавите функция за търсене по местоположение или нещо подобно.

Надявам се това да помогне.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Вмъкване и запитване на дата с MongoDB и Nodejs

  2. Как да филтрирате масив в поддокумент с MongoDB

  3. Търсене на текст в Mongoose с оператор AND

  4. Mongo C# JSON четецът очакваше стойност, но намери „replSetGetStatus“

  5. Как да конвертирате mongo ObjectId .toString, без да включвате обвивката „ObjectId()“ - само стойността?