يقدم هذا الفصل مقدمة حول استعلامات 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 ] ] // استعلام البيانات مع التقاطع مع هذه الهندسة
]
}
}
}
}
)