Bagikan melalui


$geoIntersects

Operator $geoIntersects memilih dokumen yang bidang lokasinya bersinggungan dengan objek GeoJSON tertentu. Operator ini berguna ketika Anda ingin menemukan toko yang bersinggungan dengan area geografis tertentu.

Syntax

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

Parameter-parameternya

Pengaturan Description
location field Bidang yang berisi objek GeoJSON
type Jenis objek GeoJSON (misalnya, "Polygon", "MultiPolygon")
coordinates Koordinat yang menentukan objek GeoJSON

Examples

Pertimbangkan dokumen sampel ini dari koleksi toko.

{
    "_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
                }
            ]
        }
    ]
}

Contoh 1 - Temukan penyimpanan yang secara geografis bersinggungan

Untuk performa yang lebih baik, mulailah dengan membuat indeks yang diperlukan 2dsphere .

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

Contoh kueri menemukan penyimpanan yang bersinggungan dengan area poligon tertentu menggunakan stores koleksi. Poligon ini mencakup beberapa lokasi penyimpanan dari himpunan data kami.

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)

Kueri mengembalikan penyimpanan, yang lokasinya bersinggungan dengan kontur Poligon yang ditentukan oleh koordinat.

[
  {
    "_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"
  }
]

Operator $geointersects berguna untuk skenario berikut:

  • Menemukan toko dalam batas geografis tertentu
  • Mengidentifikasi area cakupan layanan
  • Merencanakan rute pengiriman