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

Bagaimana cara mengimplementasikan has_many :melalui hubungan dengan Mongoid dan mongodb?

Mongoid tidak memiliki has_many :through atau fitur yang setara. Ini tidak akan berguna dengan MongoDB karena tidak mendukung kueri bergabung sehingga meskipun Anda dapat mereferensikan koleksi terkait melalui yang lain, itu masih memerlukan beberapa kueri.

https://github.com/mongoid/mongoid/issues/544

Biasanya jika Anda memiliki hubungan banyak-banyak dalam RDBMS, Anda akan memodelkannya secara berbeda di MongoDB menggunakan bidang yang berisi larik kunci 'asing' di kedua sisi. Misalnya:

class Physician
  include Mongoid::Document
  has_and_belongs_to_many :patients
end

class Patient
  include Mongoid::Document
  has_and_belongs_to_many :physicians
end

Dengan kata lain Anda akan menghilangkan tabel gabungan dan itu akan memiliki efek yang mirip dengan has_many :through dalam hal akses ke 'sisi lain'. Tetapi dalam kasus Anda, itu mungkin tidak tepat karena tabel gabungan Anda adalah kelas Appointment yang membawa beberapa informasi tambahan, bukan hanya asosiasi.

Bagaimana Anda memodelkan ini sampai batas tertentu tergantung pada kueri yang perlu Anda jalankan tetapi tampaknya Anda perlu menambahkan model Pengangkatan dan mendefinisikan asosiasi ke Pasien dan Dokter seperti ini:

class Physician
  include Mongoid::Document
  has_many :appointments
end

class Appointment
  include Mongoid::Document
  belongs_to :physician
  belongs_to :patient
end

class Patient
  include Mongoid::Document
  has_many :appointments
end

Dengan hubungan di MongoDB Anda selalu harus membuat pilihan antara dokumen yang disematkan atau yang terkait. Dalam model Anda, saya kira MeetingNotes adalah kandidat yang baik untuk hubungan yang tertanam.

class Appointment
  include Mongoid::Document
  embeds_many :meeting_notes
end

class MeetingNote
  include Mongoid::Document
  embedded_in :appointment
end

Ini berarti Anda dapat mengambil catatan bersama-sama dengan janji temu, sedangkan Anda akan memerlukan beberapa kueri jika ini adalah asosiasi. Anda hanya perlu mengingat batas ukuran 16 MB untuk satu dokumen yang mungkin ikut berperan jika Anda memiliki catatan rapat dalam jumlah yang sangat besar.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara mengecualikan beberapa bidang dari dokumen

  2. Cara Mendapatkan Hari, Bulan, dan Tahun dari Tanggal di SQL

  3. MongoDB $literal

  4. SQL LPAD()

  5. Cara menggunakan Enkripsi untuk Melindungi data MongoDB