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

आप MongoDB में मैत्री संबंध कैसे मॉडल करेंगे?

मोंगोडीबी आम तौर पर ग्राफ संबंधों के मॉडलिंग के लिए उपयुक्त नहीं है। विशिष्ट ग्राफ डेटाबेस हैं जो इस कार्य में उत्कृष्टता प्राप्त करते हैं।

हालांकि, जब आप मिश्रण में कोई अन्य डेटाबेस तकनीक नहीं जोड़ना चाहते हैं, तो मैं एक नया संग्रह frienships बनाने की सलाह दूंगा और प्रत्येक मित्र-संबंध को दो प्रविष्टियों की एक सरणी के साथ एक दस्तावेज़ के रूप में मॉडल करें, उनमें से प्रत्येक एक उपयोगकर्ता के बारे में संक्षिप्त जानकारी के साथ एक वस्तु है जिसे आपको अपनी मित्र-सूचियों में एक प्रविष्टि प्रदर्शित करने की आवश्यकता है:

{
    friendship: [
       {
            id:123,
            name: "Bob",
            avatar: "Bob.jpg"
       },
       {
            id:456,
            name: "Alice",
            avatar: "Alice.jpg"
       }
    ]
}

मित्रता दस्तावेज़ों में उपयोगकर्ता दस्तावेज़ों से जानकारी को डुप्लिकेट करने का कारण उपयोगकर्ता संग्रह के लिए दूसरी क्वेरी से बचने के लिए उपयोगकर्ता मित्र-सूची प्रदर्शित करने के लिए सभी डेटा प्राप्त करना है। MongoDB जॉइन नहीं कर सकता केवल जॉइन किए गए संग्रहों पर ही प्रदर्शन कर सकते हैं , इसलिए आपको कई संग्रहों पर एक विशिष्ट उपयोग-मामले के लिए आवश्यक डेटा फैलाने से बचना चाहिए, भले ही इसका अर्थ यह हो कि आप अतिरेक बनाते हैं। अन्यथा आपको एक के बाद एक कई प्रश्न करने होंगे, जो आपके आवेदन के प्रतिक्रिया समय को काफी धीमा कर देता है।

जब आप उपयोगकर्ता 123 की मित्र-सूची प्राप्त करना चाहते हैं, तो आप एक db.friendships.find({"friendship.id", 123}) निष्पादित करेंगे। (friendship.id पर एक इंडेक्स प्रदर्शन में सुधार करेगा) और फिर दस्तावेजों की एक सूची प्राप्त करें जहां बॉब या तो पहला या दूसरा मित्र है।

फिर आप इन दस्तावेज़ों को पुनरावृत्त करेंगे और सरणी-प्रविष्टि की संक्षिप्त जानकारी को आउटपुट करेंगे जो कि नहीं है उपयोगकर्ता 123.

वैकल्पिक रूप से आप एकत्रीकरण पाइपलाइन के साथ डेटाबेस पर बॉब-प्रविष्टियों को फ़िल्टर कर सकते हैं। उपरोक्त $match क्वेरी का उपयोग करें, दोस्ती-सरणी को $अनवाइंड करें और फिर उन दस्तावेज़ों से $मिलान करें जहां id 123 नहीं है। यह एक ट्रेड-ऑफ होगा:आप डेटाबेस सर्वर पर CPU लोड की कीमत पर बैंडविड्थ को संरक्षित करते हैं।

यह पूछने के लिए कि क्या दोस्ती-संबंध पहले से मौजूद है, उपयोग करें:

db.friendships.find( { $and: [ 
       { "friendship.id": 123 }, 
       { "friendship.id": 456 } 
    ] } ).count();



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. सहेजने पर एंबेडेड डॉक्यूमेंटफिल्ड को प्रदान किया गया अमान्य एम्बेडेड दस्तावेज़ उदाहरण

  2. Node.js, angular.js और MongoDB, मॉडलिंग संबंधों और अन्य रैंप अप युक्तियों के साथ शुरुआत करना

  3. कैसे एक डालने के बाद PyMongo में वस्तु आईडी प्राप्त करने के लिए?

  4. शून्य मान के साथ MongoDB प्रश्न

  5. SQL में कॉलम के डेटा प्रकार की जांच कैसे करें