MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да приложим has_many :чрез връзки с Mongoid и mongodb?

Mongoid няма has_many :through или еквивалентна функция. Не би било толкова полезно с MongoDB, тъй като не поддържа заявки за присъединяване, така че дори и да можете да препратите свързана колекция чрез друга, тя пак ще изисква множество заявки.

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

Обикновено, ако имате връзка много-много в RDBMS, вие бихте моделирали това по различен начин в MongoDB, като използвате поле, съдържащо масив от „чужди“ ключове от двете страни. Например:

class Physician
  include Mongoid::Document
  has_and_belongs_to_many :patients
end

class Patient
  include Mongoid::Document
  has_and_belongs_to_many :physicians
end

С други думи, вие бихте елиминирали таблицата за присъединяване и тя би имала подобен ефект на has_many :through по отношение на достъпа до "другата страна". Но във вашия случай това вероятно не е подходящо, защото вашата таблица за присъединяване е клас Appointment, който носи допълнителна информация, а не само асоциацията.

Как моделирате това зависи до известна степен от заявките, които трябва да изпълните, но изглежда, че ще трябва да добавите модела за среща и да дефинирате асоциации към пациент и лекар нещо подобно:

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

С връзките в MongoDB винаги трябва да правите избор между вградени или свързани документи. Във вашия модел предполагам, че MeetingNotes са добър кандидат за вградена връзка.

class Appointment
  include Mongoid::Document
  embeds_many :meeting_notes
end

class MeetingNote
  include Mongoid::Document
  embedded_in :appointment
end

Това означава, че можете да изтеглите бележките заедно със среща заедно, докато ще ви трябват множество заявки, ако това е асоциация. Просто трябва да имате предвид ограничението от 16 MB за един документ, което може да влезе в игра, ако имате много голям брой бележки за срещи.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Клониране на база данни в Mongodb между хостове с помощта на драйвер на възел

  2. Няма достъп до свойството на обекта на отговора на Mongoose

  3. Meteor.js се разгръща в example.com или www.example.com?

  4. Списък на MongoDB оператори за дата, методи и променливи

  5. Сравняване на модели за внедряване за MongoDB