MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

कैसे करें:उपयोगकर्ता के प्रशंसक हैं

सेल्फ़-रेफ़रेंशियल एसोसिएशन के बारे में कैसे:

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-प्रकार के संबंध और एम्बेड किए गए संबंध दोनों का अपना स्थान है और इनका एक साथ बहुत प्रभाव के लिए उपयोग किया जा सकता है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मावेन स्पिगोट के साथ नहीं चल रहा है

  2. या क्वेरी मिलान शून्य या मोंगोइड के साथ अभी भी मेल खाता है?

  3. MongoCommandException:त्रुटि 8000 (AtlasError) के साथ कमांड विफल:'कोई SNI नाम नहीं भेजा गया, सुनिश्चित करें कि MongoDB 3.4+ ड्राइवर/शेल का उपयोग करें।'

  4. mongodb - नेस्टेड उप-दस्तावेज़ों को खोलना;

  5. क्या है Mongoose त्रुटि ObjectId पर कास्ट करें मान XXX के लिए पथ _id पर विफल रहा?