sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur implementerar man has_many :genom relationer med Mongoid och mongodb?

Mongoid har inte has_many :through eller en motsvarande funktion. Det skulle inte vara så användbart med MongoDB eftersom det inte stöder anslutningsfrågor, så även om du skulle kunna referera till en relaterad samling via en annan skulle det fortfarande kräva flera frågor.

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

Normalt om du har en många-många-relation i ett RDBMS skulle du modellera det annorlunda i MongoDB genom att använda ett fält som innehåller en uppsättning "främmande" nycklar på vardera sidan. Till exempel:

class Physician
  include Mongoid::Document
  has_and_belongs_to_many :patients
end

class Patient
  include Mongoid::Document
  has_and_belongs_to_many :physicians
end

Med andra ord skulle du eliminera sammanfogningstabellen och det skulle ha en liknande effekt som has_many :through när det gäller åtkomst till 'andra sidan'. Men i ditt fall är det förmodligen inte lämpligt eftersom ditt anslutningsbord är en mötesklass som innehåller lite extra information, inte bara föreningen.

Hur du modellerar detta beror till viss del på vilka frågor du behöver köra men det verkar som om du kommer att behöva lägga till Mötesmodellen och definiera associationer till patient och läkare ungefär så här:

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

Med relationer i MongoDB måste du alltid välja mellan inbäddade eller associerade dokument. I din modell skulle jag gissa att MeetingNotes är en bra kandidat för en inbäddad relation.

class Appointment
  include Mongoid::Document
  embeds_many :meeting_notes
end

class MeetingNote
  include Mongoid::Document
  embedded_in :appointment
end

Detta innebär att du kan hämta anteckningarna tillsammans med ett möte, medan du skulle behöva flera frågor om detta var en förening. Du måste bara tänka på storleksgränsen på 16 MB för ett enskilt dokument som kan spela in om du har ett mycket stort antal mötesanteckningar.



  1. Kan någon förklara redis setbit-kommando?

  2. MongoError:Alternativet 'markör' krävs, förutom för aggregering med förklara-argumentet

  3. Hur man formaterar datumet i MongoDB

  4. Hur kan jag implementera behörigheter på fältnivå för MongoDB?