MongoDB के साथ काम करने वाली कार्रवाइयों में जियोस्पेशल क्वेरी का इस्तेमाल करके, ऐसे दस्तावेज़ों के बारे में क्वेरी करें जो किसी खास देशांतर और अक्षांश से एक तय सीमा के अंदर मौजूद हैं.
शुरू करने से पहले
पक्का करें कि आपके पास MongoDB के साथ काम करने वाले किसी मौजूदा डेटाबेस का ऐक्सेस हो या कोई डेटाबेस बनाएं और उससे कनेक्ट करें.
पक्का करें कि आपके पास कम से कम एक 2dsphere इंडेक्स हो या 2dsphere इंडेक्स बनाएं.
GeoJSON ऑब्जेक्ट
अपने कलेक्शन में मौजूद फ़ील्ड के ख़िलाफ़, भौगोलिक डेटा से जुड़ी क्वेरी चलाने के लिए, क्वेरी किए गए फ़ील्ड GeoJSON ऑब्जेक्ट या GeoPoint होने चाहिए.
जियोस्पेशल क्वेरी चलाना
$near ऑपरेटर का इस्तेमाल करके, जियोस्पेशल क्वेरी की जा सकती है. यह ऑपरेटर, दस्तावेज़ों में मौजूद जियो पॉइंट के हिसाब से किसी जियो पॉइंट की दूरी का हिसाब लगाता है. इसके बाद, क्वेरी के नतीजों में इन दस्तावेज़ों को दूरी के हिसाब से क्रम में लगाया जाता है. अपनी क्वेरी में $natural के अलावा, कोई दूसरा क्रम तय करके भी इस क्रम को बदला जा सकता है. $near ऑपरेटर, क्वेरी फ़िल्टर में मौजूद किसी दस्तावेज़ फ़ील्ड में होना चाहिए. साथ ही, इसमें $geometry GeoJSON फ़ील्ड होना चाहिए.
यहां दिए गए उदाहरण में, $near ऑपरेटर का इस्तेमाल, (-122.084, 37.4221) जियो पॉइंट और myCollection. में मौजूद सभी दस्तावेज़ों के location फ़ील्ड में मौजूद जियो पॉइंट के बीच की दूरी का हिसाब लगाने के लिए किया गया है. दस्तावेज़ों को वापस लाया जाता है और दो पॉइंट के बीच की दूरी के हिसाब से क्रम में लगाया जाता है.
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
}
}
}
}
)
आपकी क्वेरी के पॉइंट से दूरी को मीटर में कंट्रोल करने के लिए, $maxDistance और $minDistance फ़ील्ड का इस्तेमाल भी किया जा सकता है. हालांकि, इनका इस्तेमाल करना ज़रूरी नहीं है.
यहां दी गई क्वेरी में, दिखाए गए दस्तावेज़, पॉइंट (-122.084, 37.4221) से कम से कम 500 मीटर और ज़्यादा से ज़्यादा 2,000 मीटर की दूरी पर होने चाहिए:
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
$maxDistance: 2000,
$minDistance: 500
}
}
}
अगर आपका इंडेक्स सेगमेंट किया गया है, तो क्वेरी में "and" इक्वैलिटी फ़िल्टर में सेगमेंट शामिल करके, सेगमेंट के आधार पर फ़िल्टर किया जा सकता है.
उदाहरण के लिए, अगर आपके पास region पार्टीशन है और आपको midwest क्षेत्र के हिसाब से अपनी क्वेरी के नतीजों को फ़िल्टर करना है, तो यह तरीका अपनाएं:
db.myCollection.find( { $and: [
{ location:
{ $near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
}
},
{ "region": "midwest" }
] } )
आपके पार्टीशन की वैल्यू, एक स्ट्रिंग होनी चाहिए. आपके पार्टीशन फ़िल्टर को, खोज क्वेरी से $and ऑपरेटर की मदद से जोड़ा जाना चाहिए.
सीमाएं
$nearऔर$textऑपरेटर का इस्तेमाल, एक ही क्वेरी में नहीं किया जा सकता.$nearको मल्टी-क्लॉज़$orस्टेटमेंट में नेस्ट नहीं किया जा सकता. हालांकि, ऐसा तब किया जा सकता है, जब$near,$orक्लॉज़ में मौजूद इकलौता एक्सप्रेशन हो.$nearको क्वेरी में$notया$norऑपरेटर के साथ इस्तेमाल नहीं किया जा सकता.$nearको एग्रीगेशन क्वेरी में इस्तेमाल नहीं किया जा सकता.