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

سيناريوهات التطبيق: البحث عن المتاجر القريبة، والعثور على الأشخاص القريبين.

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

تنسيق تخزين البيانات الجغرافية في MongoDB

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

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

مشغل $near

تستخدم MongoDB المشغل $near للاستعلام عن بيانات المستند بناءً على المسافة.

التنسيق:

{
   <حقل الموقع>: { // الحقل الذي يخزن بيانات الإحداثيات
     $near: {
       $geometry: { // تعيين الإحداثيات المرجعية للمقارنة
          type: "Point" ,
          coordinates: [ خط الطول , خط العرض ]
       },
       $maxDistance: المسافة القصوى، بالأمتار,
       $minDistance: المسافة الدنيا، بالأمتار
     }
   }
}

ملاحظة: البيانات التي تم استرجاعها من استعلام $near مرتبة من الأقرب إلى الأبعد.

مثال

لنفترض أن مجموعة 'المتجر' تخزن بيانات المتجر، حيث يحتوي الحقل 'الموقع' على إحداثيات كل متجر. يعثر الاستعلام التالي على أقرب متجر إلي (المسافة الدنيا 1000 متر، المسافة القصوى 5000 متر).

db.shop.find(
   {
     location:
       { $near :
          {
            $geometry: { type: "Point",  coordinates: [ -73.9667, 40.78 ] }, // إحداثياتي
            $minDistance: 1000, // المسافة الدنيا
            $maxDistance: 5000 // المسافة القصوى
          }
       }
   }
)