ভূ-স্থানিক অনুসন্ধান ব্যবহার করুন

একটি নির্দিষ্ট দ্রাঘিমাংশ এবং অক্ষাংশ থেকে একটি নির্দিষ্ট পরিসরের মধ্যে বিদ্যমান ডকুমেন্টগুলি কোয়েরি করতে 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) বিন্দু থেকে কমপক্ষে ৫০০ মিটার এবং সর্বোচ্চ ২০০০ মিটারের মধ্যে থাকতে হবে:

  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 অপারেটর ব্যবহার করা যায় না।
  • একাধিক ক্লজযুক্ত $or স্টেটমেন্টের মধ্যে $near নেস্ট করা যায় না, যদি না $or ক্লজটিতে $near একমাত্র এক্সপ্রেশন হয়।
  • কোয়েরিতে $not বা $nor অপারেটরের সাথে $near ব্যবহার করা যায় না।
  • অ্যাগ্রিগেশন কোয়েরিতে $near সমর্থিত নয়।