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

Merancang hubungan Banyak-ke-Banyak di MongoDB (bukan tabel relasional)

Ini adalah kasus memiliki data dengan hubungan Banyak-ke-Banyak. Saya kira ada beberapa ribu siswa dan beberapa ratus kursus di database Anda.

Untuk memulainya, saya dapat menggunakan desain berikut dengan detail kursus yang disematkan pada setiap siswa sebagai larik sub-dokumen yang disebut courses .

- students collection
id:
name:
courses: [ { id: 1, name: },  { id: 5, name: }, ... ]

- courses collection
id:
name:
description:

Catatan, id dan nama kursus disimpan di kedua koleksi. Ini adalah duplikasi data. Seharusnya tidak apa-apa, karena detail duplikat tidak sering berubah (atau mungkin tidak berubah sama sekali).

Kueri semua kursus tempat siswa terdaftar, misalnya:db.students.find( { name: "John" } ) . Ini akan mengembalikan satu dokumen siswa dengan nama yang cocok dan semua mata kuliah (bidang array). Lihat db.collection.find .

Kueri semua siswa yang terdaftar dalam kursus tertentu:db.students.find( { "courses.name": "Java Programming" } ) . Ini akan mengembalikan semua dokumen siswa yang memiliki nama kursus yang cocok dengan kriteria "Pemrograman java". Lihat Meminta Array Dokumen Tersemat .

Selanjutnya, Anda dapat menggunakan proyeksi untuk mengecualikan dan menyertakan bidang dari hasil.

CATATAN:

  • Anda dapat menyematkan info siswa dalam koleksi kursus, bukan kursus ke siswa. Kueri akan mirip dengan yang di atas, tetapi Anda akan menanyakan koleksi kursus. Itu tergantung pada kasus penggunaan Anda.
  • Anda cukup menyimpan bidang id kursus di larik kursus, dari koleksi siswa; ini adalah kasus di mana Anda memiliki bidang nama kursus yang sering berubah. Kueri akan menggunakan Agregasi $lookup (operasi "bergabung") untuk mendapatkan kursus dan dari koleksi kursus.
  • Informasi tentang Desain Model Data untuk data MongoDB berbasis dokumen.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Luwak menemukan kembali objek aneh

  2. Cara memperbarui nilai array mongodb

  3. luwak - metode 'simpan' tidak ada

  4. Cara membatasi penghapusan di MongoDB untuk pengumpulan hubungan

  5. Di Mongodb, Bagaimana saya bisa Mengindeks bidang dalam koleksi di simpul sekunder (set replika) saja