मोंगोइड में has_many नहीं है:थ्रू या समकक्ष सुविधा। यह मोंगोडीबी के साथ इतना उपयोगी नहीं होगा क्योंकि यह प्रश्नों में शामिल होने का समर्थन नहीं करता है, भले ही आप किसी अन्य के माध्यम से संबंधित संग्रह का संदर्भ दे सकें, फिर भी इसे कई प्रश्नों की आवश्यकता होगी।
https://github.com/mongoid/mongoid/issues/544
आम तौर पर यदि आपके पास आरडीबीएमएस में कई-कई संबंध हैं तो आप मोंगोडीबी में अलग-अलग मॉडल करेंगे जिसमें किसी भी तरफ 'विदेशी' कुंजी की सरणी वाले फ़ील्ड का उपयोग किया जाएगा। उदाहरण के लिए:
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 पर समान प्रभाव पड़ेगा। लेकिन आपके मामले में शायद यह उचित नहीं है क्योंकि आपकी जॉइन टेबल एक अपॉइंटमेंट क्लास है जिसमें कुछ अतिरिक्त जानकारी होती है, न कि केवल एसोसिएशन।
आप इसे कैसे मॉडल करते हैं यह कुछ हद तक उन प्रश्नों पर निर्भर करता है जिन्हें आपको चलाने की आवश्यकता है, लेकिन ऐसा लगता है कि आपको अपॉइंटमेंट मॉडल जोड़ने और रोगी और चिकित्सक के साथ जुड़ाव को कुछ इस तरह परिभाषित करने की आवश्यकता होगी:
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 में संबंधों के साथ आपको हमेशा एम्बेडेड या संबद्ध दस्तावेज़ों के बीच चयन करना होता है। आपके मॉडल में मुझे लगता है कि मीटिंग नोट्स एक एम्बेडेड रिश्ते के लिए एक अच्छे उम्मीदवार हैं।
class Appointment
include Mongoid::Document
embeds_many :meeting_notes
end
class MeetingNote
include Mongoid::Document
embedded_in :appointment
end
इसका मतलब है कि आप एक साथ अपॉइंटमेंट के साथ नोट्स को पुनः प्राप्त कर सकते हैं, जबकि यदि यह एक एसोसिएशन था तो आपको कई प्रश्नों की आवश्यकता होगी। आपको केवल एक दस्तावेज़ के लिए 16MB आकार की सीमा को ध्यान में रखना होगा, जो आपके पास बहुत बड़ी संख्या में मीटिंग नोट्स होने पर चलन में आ सकता है।