MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

model luwak untuk multi-jenis pengguna

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.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Memahami Agregat MongoDB dan GroupBy

  2. Apakah Moongoose 3.8.8 mendukung operator $position?

  3. Bagaimana cara menginstal mongodb-clients versi terbaru di Ubuntu?

  4. Abaikan koneksi soket MongoDB pada Tes Musim Semi

  5. Cara menggunakan Node.js untuk membuat koneksi tunneling SSH ke database MongoDB