जियोस्पेशल क्वेरी का इस्तेमाल करना

MongoDB के साथ काम करने वाले ऑपरेशन में जियोस्पेशल क्वेरी का इस्तेमाल करें. इससे किसी खास देशांतर और अक्षांश से तय की गई रेंज में मौजूद दस्तावेज़ों के बारे में क्वेरी की जा सकती है.

शुरू करने से पहले

  1. पक्का करें कि आपके पास MongoDB के साथ काम करने वाले किसी मौजूदा ऑपरेशंस डेटाबेस का ऐक्सेस हो या कोई डेटाबेस बनाएं और उससे कनेक्ट करें.

  2. पक्का करें कि आपके पास कम से कम एक 2dsphere इंडेक्स हो या एक 2dsphere इंडेक्स बनाएं.

GeoJSON ऑब्जेक्ट

अपने कलेक्शन में मौजूद फ़ील्ड के लिए भौगोलिक क्वेरी चलाने के लिए, जिन फ़ील्ड के लिए क्वेरी की जा रही है वे GeoJSON ऑब्जेक्ट या GeoPoints होने चाहिए.

$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 का इस्तेमाल नहीं किया जा सकता.