استخدِم طلبات البحث الجغرافية المكانية في العمليات المتوافقة مع MongoDB للبحث عن المستندات الموجودة ضمن نطاق معيّن من خط طول وخط عرض محدّدَين.
قبل البدء
تأكَّد من إمكانية الوصول إلى قاعدة بيانات عمليات حالية متوافقة مع MongoDB، أو أنشئ قاعدة بيانات واتصِل بها.
تأكَّد من توفّر فهرس 2dsphere واحد على الأقل، أو أنشئ فهرس 2dsphere.
كائنات GeoJSON
لتنفيذ طلب بحث جيوفضائي في حقول مجموعتك، يجب أن تكون الحقول التي تبحث عنها عناصر GeoJSON أو نقاط جغرافية.
تنفيذ طلب بحث جغرافي مكاني
يمكنك إجراء طلب بحث جغرافي مكاني باستخدام عامل التشغيل $near الذي يحسب
المسافة بين نقطة جغرافية ونقاط جغرافية أخرى داخل
المستندات. بعد ذلك، يتم ترتيب هذه المستندات من الأقرب إلى الأبعد في
نتائج طلب البحث. يمكنك أيضًا إلغاء نظام الترتيب هذا من خلال تحديد ترتيب ثانوي، غير $natural، في طلب البحث. يجب أن يكون عامل التشغيل $near متوفّرًا في حقل مستند في فلتر طلب البحث، ويجب أن يحتوي على حقل GeoJSON $geometry.
في المثال التالي، يتم استخدام عامل التشغيل $near لحساب المسافة بين النقطة الجغرافية (-122.084, 37.4221) والنقاط الجغرافية الموجودة في الحقل location لجميع المستندات في myCollection. يتم عرض المستندات وترتيبها حسب المسافة الأقرب إلى الأبعد بين النقطتين.
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
}
}
}
}
)
يمكنك أيضًا استخدام الحقلَين الاختياريَّين $maxDistance و$minDistance
للتحكّم في المسافة بالأمتار من نقطة طلب البحث.
يوضّح المثال التالي طلب بحث يجب أن تكون المستندات المعروضة فيه على بُعد 500 متر على الأقل و2000 متر على الأكثر من النقطة (-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في طلبات البحث المجمّعة.