জিওস্পেশিয়াল কোয়েরি ব্যবহার করা

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