MongoDB भू-स्थानिक सुविधाओं को कैसे कार्यान्वित करें

Mongodb Bhu Sthanika Suvidha Om Ko Kaise Karyanvita Karem



MongoDB की भू-स्थानिक सुविधा डेटाबेस में भौगोलिक डेटा को संग्रहीत करने का एक सीधा तरीका प्रदान करती है। अनिवार्य रूप से, हम भू-स्थानिक डेटा को MongoDB में GeJSON ऑब्जेक्ट के रूप में संग्रहीत कर सकते हैं। जियोजसन एक स्वतंत्र और ओपन-सोर्स प्रारूप है जो सरल भौगोलिक डेटा के साथ जावास्क्रिप्ट ऑब्जेक्ट नोटेशन पर निर्भर करता है। यह कार्यक्षमता उन ऐप्स के लिए महत्वपूर्ण है जिन्हें स्थान के आधार पर सेवाओं की आवश्यकता होती है जैसे मैपिंग प्रक्रिया, स्थान खोज पर आधारित और अन्य। यह आलेख उदाहरण कार्यान्वयन के साथ भू-स्थानिक सुविधा को शामिल करता है।

भू-स्थानिक विशेषताओं के लिए संग्रह में दस्तावेज़ जोड़ना

MongoDB भू-स्थानिक सुविधा की कार्यक्षमता प्रदर्शित करने के लिए, हमें विशिष्ट संग्रह के लिए दस्तावेज़ों की आवश्यकता है। हम 'क्षेत्र' संग्रह में कुछ दस्तावेज़ सम्मिलित करते हैं जैसा कि निम्नलिखित में दिखाया गया है:

db.area.insertMany( [
{
नाम: 'चिल्ड्रेन पार्क' ,
स्थान: { प्रकार: 'बिंदु' , निर्देशांक: [ - 60.97 , 30.77 ] },
वर्ग: 'बगीचा'
},
{
नाम: 'छात्र क्षेत्र' ,
स्थान: { प्रकार: 'बिंदु' , निर्देशांक: [ - 60.9928 , 30.7193 ] },
वर्ग: 'बगीचा'
},
{
नाम: 'फुटबाल का मैदान' ,
स्थान: { प्रकार: 'बिंदु' , निर्देशांक: [ - 60.9375 , 30.8303 ] },
वर्ग: 'स्टेडियम'
}
] )

हमारे पास ऐसे दस्तावेज़ हैं जिनमें निर्देशांक जैसे स्थान डेटा शामिल हैं। इसके अतिरिक्त, हम भू-स्थानिक प्रश्नों के प्रदर्शन को अनुकूलित करने के लिए फ़ील्ड पर एक भू-स्थानिक सूचकांक बनाते हैं।









उदाहरण 1: $geoIntersects क्वेरी ऑपरेटर का उपयोग करना

सबसे पहले, हमारे पास भू-स्थानिक सुविधा का $geoIntersects ऑपरेटर है जो प्रदान की गई वस्तु के साथ प्रतिच्छेद करता है। $geoIntersects ऑपरेटर के निम्नलिखित कार्यान्वयन पर विचार करें:



db.area.find({ स्थान: { $geoIntersects: { $ज्यामिति: { प्रकार: 'बिंदु' ,

निर्देशांक: [ - 60.97 , 30.77 ] } } } )

उदाहरण में, हम 'क्षेत्र' संग्रह को 'खोज' ऑपरेशन के साथ कहते हैं। खोज() विधि के लिए, हम 'स्थान' फ़ील्ड सेट को भू-स्थानिक सुविधा के $geoIntersects क्वेरी ऑपरेटर को पास करते हैं। इसका उपयोग यह जांचने के लिए किया जाता है कि क्या निर्दिष्ट बिंदु ज्यामिति क्षेत्र में संग्रहीत ज्यामिति के साथ प्रतिच्छेद करता है।





फिर, $geoIntesects ऑपरेटर $geometry ऑपरेटर लेता है जहां टाइप फ़ील्ड को 'प्वाइंट' मान के साथ सेट किया जाता है और निर्देशांक फ़ील्ड को 'निर्देशांक' मान के साथ दिया जाता है। यहां, $geometry को भू-स्थानिक तुलना के लिए परिभाषित किया गया है।

निम्नलिखित आउटपुट वह है जहां अपेक्षित दस्तावेज़ पुनर्प्राप्त किया जाता है और जहां ज्यामिति फ़ील्ड में एक ज्यामितीय वस्तु होती है जो निर्दिष्ट बिंदु के साथ प्रतिच्छेद करती है:



उदाहरण 2: $नियर क्वेरी ऑपरेटर का उपयोग करना

$near ऑपरेटर एक भू-स्थानिक विशेषता भी है जिसका उपयोग उन दस्तावेज़ों की पहचान करने के लिए भू-स्थानिक क्वेरी करने के लिए किया जाता है जो भौगोलिक रूप से किसी दिए गए स्थान के निकट हैं। यह उन दस्तावेज़ों को पुनः प्राप्त करता है जिन्हें निर्दिष्ट स्थान से उनकी निकटता के अनुसार व्यवस्थित किया गया है। यहां, हम $near ऑपरेटर का कार्यान्वयन प्रदान करते हैं:

db.क्षेत्र.खोजें(
{
जगह:
{$निकट:
{
$ज्यामिति: {प्रकार: 'बिंदु' , निर्देशांक: [ - 60.9667 , 30.78 ] },
$मिनट की दूरी: 1000 ,
$अधिकतम दूरी: 5000
}
}
}
)

उदाहरण में, हम 'खोज' ऑपरेशन के अंदर 'क्षेत्र' संग्रह के 'स्थान' फ़ील्ड को परिभाषित करते हैं। फिर, हम भू-स्थानिक सुविधा के $near क्वेरी ऑपरेटर को उस 'स्थान' फ़ील्ड पर सेट करते हैं। $near ऑपरेटर दिए गए निर्देशांक बिंदु के साथ निकट बिंदु की खोज करता है। इसके बाद, हम $near ऑपरेटर में $minDistance और $maxDistance पैरामीटर का उपयोग करते हैं जो दिए गए बिंदु से निर्दिष्ट दूरी सीमा के भीतर दस्तावेज़ों को पुनः प्राप्त करने के लिए कुछ मान प्रदान किए जाते हैं।

दस्तावेज़ को उस आउटपुट में पुनर्प्राप्त किया जाता है जो भू-स्थानिक 'क्षेत्र' संग्रह में निर्दिष्ट स्थानों या रुचि के बिंदुओं के पास है:

उदाहरण 3: $nearsphere क्वेरी ऑपरेटर का उपयोग करना

वैकल्पिक रूप से, हमारे पास $nearsphere ऑपरेटर है जो $near ऑपरेटर के समान है, लेकिन $nearSphere दूरियों की गणना करते समय पृथ्वी के गोलाकार आकार को ध्यान में रखता है।

db.क्षेत्र.खोजें(
{
जगह: {
$निकट क्षेत्र: {
$ज्यामिति: {
प्रकार : 'बिंदु' ,
निर्देशांक : [ - 60.9667 , 30.78 ]
},
$मिनट की दूरी: 1000 ,
$अधिकतम दूरी: 5000
}
}
}
)

उदाहरण में, हम भू-स्थानिक क्वेरी के $nearsphere ऑपरेटर का उपयोग करते हैं। $nearspehere ऑपरेटर यहां उस दस्तावेज़ की खोज करता है जिसके निकटतम बिंदु क्वेरी में निर्दिष्ट बिंदुओं के करीब हैं, और बिंदु समन्वय फ़ील्ड सरणी पर सेट हैं।

उसके बाद, हम $minDistance और $maxDistance पैरामीटर स्थापित करके परिणामों को परिष्कृत करते हैं। $minDistance पैरामीटर यह सुनिश्चित करता है कि लौटाए गए दस्तावेज़ निर्दिष्ट बिंदु से कम से कम 1000 मीटर दूर हैं, जबकि $maxDistance पैरामीटर परिणामों को उन स्थानों तक सीमित करता है जो 5000 मीटर से अधिक दूर नहीं हैं।

दस्तावेज़ आउटपुट में दिए गए निर्देशांक के साथ बिंदु से एक निर्दिष्ट मीटर के भीतर एक स्थान के साथ प्रदर्शित होता है:

उदाहरण 4: $geoWithin क्वेरी ऑपरेटर का उपयोग करना

इसके बाद, हमारे पास MongoDB में $geoWithin ऑपरेटर है जिसका उपयोग भू-स्थानिक प्रश्नों के लिए उन दस्तावेज़ों को खोजने के लिए किया जाता है जो पूरी तरह से एक निर्दिष्ट आकार जैसे कि एक सर्कल के भीतर होते हैं। आइए $geoWithin क्वेरी का निम्नलिखित प्रदर्शन करें:

db.area.find({स्थान:

{ $जियोविदिन:

{ $केंद्रक्षेत्र: [[ - 60.93414657 , 30.82302903 ], 3 / 3963.2 ] } } })

उदाहरण में, हम 2डी गोले पर एक निश्चित गोलाकार क्षेत्र के भीतर 'क्षेत्र' संग्रह के दस्तावेज़ ढूंढने के लिए $geoWithin ऑपरेटर का उपयोग करते हैं। इसके लिए, हम $geoWithin ऑपरेटर के अंदर $centerSphere ऑपरेटर को निर्दिष्ट करते हैं जो दो तर्कों को केंद्रित बिंदु के रूप में लेता है, जो संभवतः यहां निर्देशांक बिंदु का प्रतिनिधित्व करता है, और सर्कल का त्रिज्या जो मील में दूरी मान का प्रतिनिधित्व करता है।

परिणामी दस्तावेज़ को निम्नलिखित में पुनः प्राप्त किया गया है जो एक भू-स्थानिक बिंदु का प्रतिनिधित्व करता है जो उस वृत्त के भीतर आता है जिसे दिए गए केंद्र बिंदु और लगभग 3 मील की त्रिज्या द्वारा परिभाषित किया गया है:

उदाहरण 5: $geoNear क्वेरी ऑपरेटर का उपयोग करना

इसके अलावा, $geoNear ऑपरेटर भी एक भू-स्थानिक ऑपरेटर है जिसका उपयोग एकत्रीकरण पाइपलाइन के लिए किया जाता है। यह एक भू-स्थानिक क्वेरी निष्पादित करता है और उन दस्तावेज़ों को लौटाता है जिन्हें एक निर्दिष्ट बिंदु पर उनकी निकटता के आधार पर क्रमबद्ध किया जाता है। यहां, हमने $geoNear ऑपरेटर दिया है जिसे एकत्रीकरण पाइपलाइन के अंदर कहा जाता है।

db.क्षेत्र.एग्रीगेट([
{
$जियोनियर: {
निकट: {प्रकार: 'बिंदु' , निर्देशांक: [ - 60.99279 , 30.719296 ] },
दूरी फ़ील्ड: 'जिला.गणना' ,
अधिकतम दूरी: 2 ,
क्वेरी: {श्रेणी: 'बगीचा' },
स्थान शामिल करें: 'जिला.स्थान' ,
गोलाकार: सत्य
}
}
])

उदाहरण में, हम MongoDB की समग्र विधि को कॉल करते हैं और इसके अंदर $geoNear ऑपरेटर को परिभाषित करते हैं। क्वेरी व्यवहार को निर्दिष्ट करने के लिए $geoNear ऑपरेटर को कई मापदंडों के साथ सेट किया गया है। सबसे पहले, हम 'निकट' पैरामीटर सेट करते हैं जो खोज के संदर्भ बिंदु के रूप में 'निर्देशांक' मान प्रदान करता है।

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

उसके बाद, हमारे पास 'क्वेरी' पैरामीटर है जो दस्तावेज़ों को 'श्रेणी' फ़ील्ड द्वारा फ़िल्टर करता है और केवल उन दस्तावेज़ों पर विचार करता है जहां 'श्रेणी' 'पार्क' है। फिर हम स्थान की जानकारी रखने के लिए 'includeLocs' पैरामीटर को कॉल करते हैं। हम अंततः 'सही' मान के साथ 'गोलाकार' पैरामीटर निर्दिष्ट करते हैं जो 2डी गोलाकार समन्वय प्रणाली का उपयोग करके दूरियों की गणना करता है।

एकत्रीकरण पाइपलाइन आउटपुट में दस्तावेज़ का प्रतिनिधित्व करती है जो तदनुसार पैरामीटर के विरुद्ध जानकारी प्रदर्शित करती है। निम्नलिखित 'dist.calculated' फ़ील्ड संदर्भ बिंदु से प्रत्येक दस्तावेज़ की दूरी प्रदर्शित करता है:

निष्कर्ष

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