sql >> Database >  >> NoSQL >> MongoDB

Hoe has_many te implementeren:via relaties met Mongoid en mongodb?

Mongoid heeft geen has_many :through of een gelijkwaardige functie. Het zou niet zo handig zijn met MongoDB omdat het geen join-query's ondersteunt, dus zelfs als u via een andere naar een gerelateerde verzameling zou kunnen verwijzen, zou er nog steeds meerdere query's nodig zijn.

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

Normaal gesproken, als je een veel-veel-relatie hebt in een RDBMS, zou je dat in MongoDB anders modelleren met behulp van een veld met aan weerszijden een reeks 'buitenlandse' sleutels. Bijvoorbeeld:

class Physician
  include Mongoid::Document
  has_and_belongs_to_many :patients
end

class Patient
  include Mongoid::Document
  has_and_belongs_to_many :physicians
end

Met andere woorden, je zou de join-tabel elimineren en het zou een soortgelijk effect hebben als has_many :through in termen van toegang tot de 'andere kant'. Maar in jouw geval is dat waarschijnlijk niet gepast, omdat je join-tabel een afspraakklasse is die wat extra informatie bevat, niet alleen de associatie.

Hoe u dit modelleert, hangt tot op zekere hoogte af van de query's die u moet uitvoeren, maar het lijkt erop dat u het afspraakmodel moet toevoegen en associaties met patiënt en arts moet definiëren, zoiets als dit:

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

Bij relaties in MongoDB moet je altijd een keuze maken tussen embedded of bijbehorende documenten. In uw model vermoed ik dat MeetingNotes een goede kandidaat is voor een ingebedde relatie.

class Appointment
  include Mongoid::Document
  embeds_many :meeting_notes
end

class MeetingNote
  include Mongoid::Document
  embedded_in :appointment
end

Dit betekent dat u de notities samen met een afspraak allemaal tegelijk kunt ophalen, terwijl u meerdere vragen zou hebben als dit een associatie was. U hoeft alleen maar rekening te houden met de limiet van 16 MB voor een enkel document, die een rol kan spelen als u een zeer groot aantal vergadernotities heeft.



  1. MongoDB - Gegevens importeren

  2. Hoe kan ik meerdere documenten in mangoest bijwerken?

  3. De snelste MongoDB op Azure!

  4. Gegevens toevoegen aan bestaand gridfs-bestand