Saya sarankan menggunakan pendekatan ini.
Anda harus memiliki Schemas
yang terpisah untuk Account
, Teacher
dan Student
jadi info yang berbeda antara guru dan siswa tidak boleh tercampur di satu tempat.
Akun
var Account = new Schema({
email:String,
password:String,
_teacher:{type:Schema.Types.ObjectId, ref:'Teacher'},
_student:{type:Schema.Types.ObjectId, ref:'Student'}
})
Di bawah akun, Anda harus mereferensikan model Guru jika akun guru merujuk ke model Siswa.
Untuk memeriksa apakah Account
adalah Teacher
atau Student
Anda bisa memeriksa _teacher
, jika memiliki nilai maka itu adalah Teacher
akun lain itu mahasiswa. Tetapi untuk membuat kondisi Anda lebih unik, periksa keduanya _teacher
dan _student
.
Pendekatan ini akan menghemat banyak refactoring di masa depan jika Anda memutuskan untuk mengizinkan guru menjadi siswa juga (yang bukan tidak mungkin terjadi), dia bisa menggunakan akun yang sama dan mendaftar sebagai siswa. Seperti yang dilakukan google, pada akun/email beberapa jenis aplikasi untuk digunakan.
Guru
var Teacher = new Schema({
name:{type:Schema.Types.ObjectId, ref:'Name'}
// Other teachers info
})
Siswa
var Student = new Schema({
name:{type:Schema.Types.ObjectId, ref:'Name'}
// Other students info
})
Nama
Pada bagian ini mungkin Anda bertanya-tanya mengapa Anda membutuhkan model nama yang terpisah. Itu karena dalam pendekatan ini Anda cukup menggunakan satu route
atau endpoint
atau query
untuk menelusuri pengguna di seluruh aplikasi Anda. Saat Anda mencari nama, semua siswa dan guru dengan hasil yang cocok akan ditanyai tanpa melihat ke 2 koleksi yang berbeda (Koleksi guru dan Koleksi siswa).
Pada kasus penggunaan yang baik untuk ini, pasti Anda akan memiliki dasbor admin tempat Anda dapat mengelola semua siswa dan guru. Di dasbor itu Anda hanya dapat satu bidang pencarian untuk guru dan siswa.
var Name = new Schema({
firstName:String,
middleName:String,
lastName:String
})
Bacaan yang bagus
Kiat lainnya
Anda juga dapat memisahkan Address
seperti yang saya lakukan dengan nama di sini. Alasan? Tujuan yang sama dengan Name
, Anda mungkin ingin menambahkan fitur pencarian berdasarkan lokasi atau semacamnya.
Saya harap ini membantu.