این فصل با معرفی کوئری‌های جغرافیایی MongoDB شروع می‌شود که پشتیبانی از جستجوهای هندسی تقاطع و حاویت را فراهم می‌کند.

سناریوهای کاربرد:

  • ترسیم یک دایره روی نقشه و جستجوی داده‌ها درون دایره.

آموزش پیش‌نیاز

فرمت‌های ذخیره سازی داده‌های جغرافیایی برای MongoDB

پیش‌نیازهای جستجوی داده بر اساس فاصله عبارتند از:

  • هر داده سند شامل یک فیلد برای ذخیره داده‌های مختصات می‌باشد، به عنوان مثال: فیلد مکان داده‌های مختصات یک فروشگاه را ذخیره می‌کند.
  • ایجاد یک فضای فیزیکی 2dsphere یا 2d فهرست فضایی.

عملگر $geoWithin

این عموما برای جستجوی نقاط مختصات موجود در محدوده هندسی مشخص استفاده می‌شود، به عنوان مثال: هنگام جستجوی خانه‌ها با ترسیم روی نقشه، یک منطقه روی نقشه رسم کرده و خانه‌های موجود در آن منطقه را جستجو کنید.

قالب نحو:

{
   <فیلد مکان>: { // فیلد جستجو
      $geoWithin: {
         $geometry: {
            type:  , // تنها پشتیبانی از چند‌ضلعی یا چند‌ضلعی چندگانه است.
            coordinates: [ <مختصات> ]  // مجموعه‌ای از نقاط مختصات هندسی
         }
      }
   }
}

مثال:

db.places.find(
   {
     loc: { // فیلد loc داده‌ی مختصات را ذخیره می‌کند
       $geoWithin: {
          $geometry: {
             type: "Polygon" ,
             coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // داده‌های موجود در این محدوده هندسی را پیدا کنید
          }
       }
     }
   }
)

جستجوی داده سند در داخل منطقه هندسی مشخص شده در مجموعه places.

عملگر $geoIntersects

تفاوت این عمل با $geoWithin این است که از $geoIntersects برای تعیین وجود تلاقی بین دو هندسه استفاده می‌شود.

قالب:

{
  <فیلد مکان>: { // فیلد ذخیره نقاط مختصات هندسی
     $geoIntersects: {
        $geometry: {
           type: "<نوع شی geojson>" , // نوع هندسی
           coordinates: [ <مختصات> ] // مجموعه‌ای از نقاط مختصات هندسی، داده‌ها را با تلاقی با این هندسه جستجو کنید
        }
     }
  }
}

مثال:

db.places.find(
   {
     loc: { // فیلد loc داده‌های منطقه را ذخیره می‌کند، که یک شکل هندسی می‌باشد
       $geoIntersects: {
          $geometry: {
             type: "Polygon" ,
             coordinates: [
               [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] // داده‌ها با تلاقی با این هندسه را جستجو کنید
             ]
          }
       }
     }
   }
)