sql >> Databáze >  >> NoSQL >> MongoDB

Jak implementovat has_many :prostřednictvím vztahů s Mongoidem a mongodb?

Mongoid nemá has_many :through ani ekvivalentní funkci. S MongoDB by to nebylo tak užitečné, protože nepodporuje spojovací dotazy, takže i když byste mohli odkazovat na související kolekci přes jinou, stále by to vyžadovalo více dotazů.

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

Normálně, pokud máte v RDBMS vztah mnoho-mnoho, modelovali byste to jinak v MongoDB pomocí pole obsahujícího pole „cizí“ klíče na obou stranách. Například:

class Physician
  include Mongoid::Document
  has_and_belongs_to_many :patients
end

class Patient
  include Mongoid::Document
  has_and_belongs_to_many :physicians
end

Jinými slovy, odstranili byste tabulku spojení a mělo by to podobný účinek jako has_many :through, pokud jde o přístup k „druhé straně“. Ale ve vašem případě to pravděpodobně není vhodné, protože vaše tabulka spojení je třída Appointment, která nese nějaké další informace, nejen asociaci.

To, jak to modelujete, závisí do určité míry na dotazech, které musíte spustit, ale zdá se, že budete muset přidat model schůzek a definovat asociace k pacientovi a lékaři asi takto:

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

Se vztahy v MongoDB si vždy musíte vybrat mezi vloženými nebo přidruženými dokumenty. Ve vašem modelu bych tipoval, že MeetingNotes jsou dobrým kandidátem na vložený vztah.

class Appointment
  include Mongoid::Document
  embeds_many :meeting_notes
end

class MeetingNote
  include Mongoid::Document
  embedded_in :appointment
end

To znamená, že poznámky můžete načíst společně se schůzkou dohromady, zatímco pokud by se jednalo o přidružení, potřebovali byste více dotazů. Jen musíte mít na paměti limit velikosti 16 MB pro jeden dokument, který může vstoupit do hry, pokud máte velmi velký počet poznámek ze schůzky.



  1. Výukový program MongoDB pro rok 2022 – Zjistěte, co je MongoDB?

  2. Nainstalujte MongoDB Community Edition 4.0 na Linux

  3. MongoDB:spočítejte počet položek v poli

  4. MongoDB:zkontrolujte připojení k DB