MongoDB - रिश्ते
MongoDB में संबंध दर्शाते हैं कि विभिन्न दस्तावेज़ तार्किक रूप से एक-दूसरे से कैसे संबंधित हैं। रिश्ते के माध्यम से मॉडलिंग की जा सकती हैEmbedded तथा Referencedदृष्टिकोण। ऐसे संबंध 1: 1, 1: N, N: 1 या N: N हो सकते हैं।
आइए हम उपयोगकर्ताओं के लिए पते संग्रहीत करने के मामले पर विचार करें। इसलिए, एक उपयोगकर्ता के पास 1: N संबंध बनाने वाले कई पते हो सकते हैं।
निम्नलिखित नमूना दस्तावेज़ संरचना है user दस्तावेज़ -
{
"_id":ObjectId("52ffc33cd85242f436000001"),
"name": "Tom Hanks",
"contact": "987654321",
"dob": "01-01-1991"
}
निम्नलिखित नमूना दस्तावेज़ संरचना है address दस्तावेज़ -
{
"_id":ObjectId("52ffc4a5d85242602e000000"),
"building": "22 A, Indiana Apt",
"pincode": 123456,
"city": "Los Angeles",
"state": "California"
}
मॉडलिंग एंबेडेड रिश्ते
एम्बेडेड दृष्टिकोण में, हम उपयोगकर्ता दस्तावेज़ के अंदर पता दस्तावेज़ को एम्बेड करेंगे।
> db.users.insert({
{
"_id":ObjectId("52ffc33cd85242f436000001"),
"contact": "987654321",
"dob": "01-01-1991",
"name": "Tom Benzamin",
"address": [
{
"building": "22 A, Indiana Apt",
"pincode": 123456,
"city": "Los Angeles",
"state": "California"
},
{
"building": "170 A, Acropolis Apt",
"pincode": 456789,
"city": "Chicago",
"state": "Illinois"
}
]
}
})
यह दृष्टिकोण एकल दस्तावेज़ में सभी संबंधित डेटा को बनाए रखता है, जिससे इसे पुनः प्राप्त करना और बनाए रखना आसान हो जाता है। पूरे दस्तावेज को एक ही प्रश्न में पुनः प्राप्त किया जा सकता है जैसे -
>db.users.findOne({"name":"Tom Benzamin"},{"address":1})
ध्यान दें कि उपरोक्त क्वेरी में, db तथा users क्रमशः डेटाबेस और संग्रह हैं।
दोष यह है कि यदि एम्बेडेड दस्तावेज़ आकार में बहुत अधिक बढ़ता रहता है, तो यह पढ़ने / लिखने के प्रदर्शन को प्रभावित कर सकता है।
मॉडलिंग रिफरेंस रिलेशनशिप
यह सामान्यीकृत संबंधों को डिजाइन करने का दृष्टिकोण है। इस दृष्टिकोण में, उपयोगकर्ता और पते के दस्तावेज़ दोनों को अलग-अलग बनाए रखा जाएगा, लेकिन उपयोगकर्ता दस्तावेज़ में एक फ़ील्ड होगा जो पते दस्तावेज़ का संदर्भ देगाid मैदान।
{
"_id":ObjectId("52ffc33cd85242f436000001"),
"contact": "987654321",
"dob": "01-01-1991",
"name": "Tom Benzamin",
"address_ids": [
ObjectId("52ffc4a5d85242602e000000"),
ObjectId("52ffc4a5d85242602e000001")
]
}
जैसा कि ऊपर दिखाया गया है, उपयोगकर्ता दस्तावेज़ में सरणी फ़ील्ड है address_idsजिसमें संबंधित पते के ऑब्जेक्ट शामिल हैं। इन ObjectIds का उपयोग करके, हम पते के दस्तावेजों को क्वेरी कर सकते हैं और वहां से पते का विवरण प्राप्त कर सकते हैं। इस दृष्टिकोण के साथ, हमें दो प्रश्नों की आवश्यकता होगी: सबसे पहले लाने के लिएaddress_ids खेतों से user इन पतों को लाने के लिए दस्तावेज़ और दूसरा address संग्रह।
>var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})
>var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})