sql >> Base de Datos >  >> NoSQL >> MongoDB

modelo de mangosta para múltiples tipos de usuarios

Sugiero usar este enfoque.

Deberías tener un Schemas separado para Account , Teacher y Student por lo tanto, la información diferente entre los profesores y los estudiantes no debe mezclarse en un solo lugar.

Cuenta

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

En la cuenta, debe hacer referencia al modelo del profesor si la cuenta del profesor hace referencia al modelo de los alumnos.

Para verificar si Account es Teacher o Student podrías comprobar _teacher , si tiene un valor entonces es un Teacher cuenta de lo contrario es un estudiante. Pero para que la condición sea más única para usted, marque ambos _teacher y _student .

Este enfoque le ahorrará una gran cantidad de refactorización en el futuro si decide permitir que el maestro también sea un estudiante (lo cual no es imposible), él / ella puede usar la misma cuenta y registrarse como estudiante. Al igual que lo que está haciendo Google, en la cuenta/correo electrónico hay varios tipos de aplicaciones para usar.

Profesor

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

Estudiante

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

Nombre

En esta parte, tal vez se esté preguntando por qué necesita un modelo separado para el nombre. Bueno, eso se debe a que en este enfoque solo puede usar una route o endpoint o query para buscar usuarios en su aplicación. Cuando busque un nombre, todos los estudiantes y profesores con resultados coincidentes serán consultados sin buscar en 2 colecciones diferentes (Colección de profesores y Colección de estudiantes).

Un buen caso de uso para esto es, seguro que tendrá un panel de administración donde podrá administrar a todos los estudiantes y profesores. En ese tablero, puede usar un solo campo de búsqueda tanto para el maestro como para el estudiante.

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

Buenas lecturas

Otros consejos

También puede separar la Address como hice con el nombre aquí. ¿Razón? Mismo propósito que con el Name , es posible que desee agregar la función de búsqueda por ubicación o algo así.

Espero que esto ayude.