$geoNear (قريب جغرافيًا)
آخر تحديث: 2026-10-09
$geoNear (قريب جغرافيًا)
يصدر $geoNear مستندات مرتبة حسب القرب الجغرافي ويجب أن يكون المرحلة الأولى من خط الأنابيب، متطلبًا فهرسًا جغرافيًا على المجموعة. يدعم حقل مخرج distanceField وحسابًا كرويًا أو مستويًا ومرشحات minDistance و maxDistance ومفتاح key للاختيار بين عدة حقول جغرافية. كل نتيجة تكتسب مسافة محسوبة.
| الفئة | المتقدم والتشخيص |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $geoNear: { near: { type: "Point", coordinates: [ <longitude>, <latitude> ] }, distanceField: "<distanceField>", spherical: <bool>, maxDistance: <meters>, query: <filter> } }
⚙️ المعلمات
| near | نقطة المرجع، وهي نقطة GeoJSON أو مصفوفة إحداثيات قديمة. |
|---|---|
| distanceField | اسم الحقل الذي يستقبل المسافة المحسوبة. |
| spherical | عندما تكون true، تُحسب المسافات باستخدام الهندسة الكروية. |
| query | مرشِّح استعلام إضافي. |
القيمة المرجعة:تدفق مستندات مرتَّب حسب المسافة، مع تضمين distanceField
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $geoNear: الأماكن ضمن 5 كم
db.places.aggregate([
{ $geoNear: {
near: { type: 'Point', coordinates: [-73.98, 40.75] },
distanceField: 'dist',
spherical: true,
maxDistance: 5000
} }
])
المخرجات:
// مرتبة حسب المسافة تصاعديًا، كل مستند يحمل dist
📌 ملاحظات
- يجب أن يكون المرحلة الأولى من خط الأنابيب
- تحتاج المجموعة فهرسًا جغرافيًا (2dsphere أو 2d)
- يتطلب near بصيغة GeoJSON ضبط spherical: true
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qماذا يحدث دون فهرس جغرافي؟
Aيرمي خطأ؛ يجب أن تملك المجموعة فهرسًا جغرافيًا 2dsphere أو 2d.
Qهل يمكن تصفية النتائج حسب المسافة؟
Aنعم، عبر maxDistance و minDistance، بالأمتار للوضع الكروي.
Qهل يمكن إضافة مرشحات استعلام إضافية؟
Aنعم، عبر معامل query، مثل { query: { category: 'restaurant' } }.