يقدم هذا الفصل مقدمة حول استعلامات MongoDB الجغرافية، التي تدعم الاستعلامات عن التقاطع والاحتواء الهندسي.

سيناريوهات التطبيق:

  • رسم دائرة على الخريطة واستعلام البيانات داخل الدائرة.

البرنامج التعليمي المسبق

تنسيقات تخزين البيانات الجغرافية لـ MongoDB](mongodb-geospatial-modeling.html "تنسيقات تخزين البيانات الجغرافية لـ MongoDB")

المتطلبات المسبقة للاستعلام عن البيانات بناءً على المسافة عبارة عن:

  • كل بيانات المستند تحتوي على حقل لتخزين بيانات الإحداثيات، على سبيل المثال: يحتوي الحقل الموقع على إحداثيات متجر.
  • إنشاء فهرس مكاني 2dsphere أو 2D.

المشغل $geoWithin

غالبًا ما يُستخدم لاستعلام نقاط الإحداثيات المحتواة داخل نطاق هندسي محدد، على سبيل المثال: عند البحث عن منازل عن طريق الرسم على الخريطة، رسم منطقة على الخريطة واستعلام المنازل داخل تلك المنطقة.

تنسيق البناء:

{
   <حقل الموقع>: { // حقل الاستعلام
      $geoWithin: {
         $geometry: {
            type:  , // يدعم فقط Polygon أو MultiPolygon.
            coordinates: [ <الإحداثيات> ]  // مجموعة من نقاط الإحداثيات الهندسية
         }
      }
   }
}

مثال:

db.places.find(
   {
     loc: { // يخزن حقل loc بيانات الإحداثيات
       $geoWithin: {
          $geometry: {
             type: "Polygon" ,
             coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // العثور على البيانات داخل هذه المنطقة الهندسية
          }
       }
     }
   }
)

الاستعلام عن بيانات المستند داخل المنطقة الهندسية المحددة في مجموعة الأماكن.

المشغل $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 ] ] // استعلام البيانات مع التقاطع مع هذه الهندسة
             ]
          }
       }
     }
   }
)