Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Working with Geospatial Data

Working with geospatial data in MongoDB

MongoDB supports geospatial data and provides various features for storing and querying location-based data. Geospatial indexes and queries allow you to efficiently perform spatial operations such as finding points within a specific area or determining the distance between points.

Geospatial Indexes

To work with geospatial data, you need to create a geospatial index. MongoDB supports two types of geospatial indexes:

  • 2d Index: Suitable for flat, planar surfaces.
  • 2dsphere Index: Suitable for spherical surfaces such as the Earth's surface.

Creating a Geospatial Index

Below is an example of creating a 2dsphere index on a location field:

Create Geospatial Index Command

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

Geospatial Queries

Geospatial queries in MongoDB allow you to perform operations such as finding documents near a specific point, within a specific area, or within a specific shape.

Example: Finding Documents Near a Point

Below is an example of using the $near operator to find documents near a specific point:

$near Query Example

db.places.find({
    location: {
        $near: {
            $geometry: {
                type: "Point",
                coordinates: [ -73.9667, 40.78 ]
            },
            $maxDistance: 1000
        }
    }
})

Example: Finding Documents Within a Polygon

Below is an example of using the $geoWithin operator to find documents within a polygon:

$geoWithin Query Example

db.places.find({
    location: {
        $geoWithin: {
            $geometry: {
                type: "Polygon",
                coordinates: [
                    [
                        [ -73.97, 40.77 ],
                        [ -73.95, 40.77 ],
                        [ -73.95, 40.75 ],
                        [ -73.97, 40.75 ],
                        [ -73.97, 40.77 ]
                    ]
                ]
            }
        }
    }
})