सेल्फ़-रेफ़रेंशियल एसोसिएशन के बारे में कैसे:
class User
include Mongoid::Document
references_many :fans,
:class_name => 'User',
:stored_as => :array,
:inverse_of => :fan_of
references_many :fan_of,
:class_name => 'User',
:stored_as => :array,
:inverse_of => :fans
end
# let's say we have users: al, ed, sports_star, movie_star
sports_star.fans << al
movie_star.fans << al
sports_star.fans << ed
movie_star.fans << ed
movie_star.fans # => al, ed
al.fan_of # => sports_star, movie_star
समस्या यह है कि आप केवल एम्बेडेड दस्तावेज़ों का उपयोग करके संबंधपरक सहयोग करने का प्रयास कर रहे हैं। जब आपके पास Fan
. हो एक User
. के अंदर एम्बेड किया गया , आप केवल Fan
. तक पहुंच सकते हैं अपने मूल User
. के माध्यम से . आप कुछ ऐसा नहीं कर सकते जैसे Fan.find(some_id)
क्योंकि Fan
. का कोई संग्रह नहीं है रिकॉर्ड।
आखिरकार, MongoDB आभासी संग्रह का समर्थन करेगा जो आपको ऐसा करने की अनुमति देगा। अभी के लिए, आपको संबंधपरक-प्रकार के संघों का उपयोग करना होगा। यदि आप इस मामले में एम्बेडेड दस्तावेज़ों का उपयोग करना चाहते हैं, तो आपको मूल रिकॉर्ड के माध्यम से खोजने के लिए कुछ बदसूरत और अक्षम कस्टम तरीके बनाने होंगे।
MongoDB और Mongoid के साथ, मैंने पाया है कि आप एम्बेडेड और रिलेशनल एसोसिएशन के बीच आसानी से स्विच कर सकते हैं। SQL-प्रकार के संबंध और एम्बेड किए गए संबंध दोनों का अपना स्थान है और इनका एक साथ बहुत प्रभाव के लिए उपयोग किया जा सकता है।