مشاركة عبر


$geoIntersects

$geoIntersects يحدد عامل التشغيل المستندات التي يتقاطع حقل موقعها مع كائن GeoJSON محدد. يكون عامل التشغيل هذا مفيدا عندما تريد العثور على مخازن تتقاطع مع منطقة جغرافية معينة.

إعراب

{
  <location field>: {
    $geoIntersects: {
      $geometry: {
        type: <GeoJSON type>,
        coordinates: <coordinates>
      }
    }
  }
}

Parameters

المعلمة‬ Description
location field الحقل الذي يحتوي على كائن GeoJSON
type نوع كائن GeoJSON (على سبيل المثال، "مضلع"، "متعدد المضلعات")
coordinates الإحداثيات التي تحدد كائن GeoJSON

أمثلة

ضع في اعتبارك نموذج المستند هذا من مجموعة المتاجر.

{
    "_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
    "name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
    "location": {
        "lat": -89.2384,
        "lon": -46.4012
    },
    "staff": {
        "totalStaff": {
            "fullTime": 8,
            "partTime": 20
        }
    },
    "sales": {
        "totalSales": 75670,
        "salesByCategory": [
            {
                "categoryName": "Wine Accessories",
                "totalSales": 34440
            },
            {
                "categoryName": "Bitters",
                "totalSales": 39496
            },
            {
                "categoryName": "Rum",
                "totalSales": 1734
            }
        ]
    },
    "promotionEvents": [
        {
            "eventName": "Unbeatable Bargain Bash",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 6,
                    "Day": 23
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 7,
                    "Day": 2
                }
            },
            "discounts": [
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 7
                },
                {
                    "categoryName": "Bitters",
                    "discountPercentage": 15
                },
                {
                    "categoryName": "Brandy",
                    "discountPercentage": 8
                },
                {
                    "categoryName": "Sports Drinks",
                    "discountPercentage": 22
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 19
                }
            ]
        },
        {
            "eventName": "Steal of a Deal Days",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 21
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 29
                }
            },
            "discounts": [
                {
                    "categoryName": "Organic Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "White Wine",
                    "discountPercentage": 20
                },
                {
                    "categoryName": "Sparkling Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 17
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 23
                }
            ]
        }
    ]
}

مثال 1 - البحث عن المتاجر التي تتقاطع جغرافيا

للحصول على أداء أفضل ، ابدأ بإنشاء الفهرس المطلوب 2dsphere .

db.stores.createIndex({ "location": "2dsphere" })

يجد الاستعلام المثال مخازن تتقاطع مع منطقة مضلع معينة باستخدام stores المجموعة. يشمل هذا المضلع العديد من مواقع المتاجر من مجموعة البيانات الخاصة بنا.

db.stores.find(
  {
    location: {
      $geoIntersects: {
        $geometry: {
          type: "Polygon",
          coordinates: [[
            [-80.0, -75.0],
            [-80.0, -70.0],
            [-55.0, -70.0],
            [-55.0, -75.0],
            [-80.0, -75.0]
          ]]
        }
      }
    }
  },
  {
    name: 1,
    location: 1
  }
).limit(2)

يقوم الاستعلام بإرجاع المخازن، التي تتقاطع مواقعها مع محيط المضلع المحدد بواسطة الإحداثيات.

[
  {
    "_id": "6bba7117-d180-4584-b50c-a2f843e9c9ab",
    "name": "Wide World Importers | Craft Supply Mart - Heaneybury",
    "location": { "lat": -64.4843, "lon": -107.7003 },
    "city": "Heaneybury"
  },
  {
    "_id": "2fd37663-e0ff-41d0-9c5a-3aec86285daa",
    "name": "Relecloud | Cleaning Supply Closet - Patiencehaven",
    "location": { "lat": -70.6077, "lon": -105.9901 },
    "city": "Patiencehaven"
  }
]

عامل تشغيل $geointersects مفيد للسيناريوهات التالية:

  • البحث عن مخازن ضمن حدود جغرافية محددة
  • تحديد مناطق تغطية الخدمة
  • تخطيط مسارات التسليم