Table of Contents
- Introduction
- Understanding Geospatial Data
- Types of Geospatial Indexes in MongoDB
- The 2dsphere Index Explained
- Creating a 2dsphere Index
- Storing GeoJSON Data
- Geospatial Query Operators
- Using
$nearand$geoWithin - The
$geoNearAggregation Stage - Real-World Use Cases
- Best Practices for Geospatial Queries
- Conclusion
1. Introduction
Modern applications—from ride-hailing platforms to delivery systems and social networking apps—often depend on location-based data. MongoDB offers robust support for geospatial data through its 2dsphere indexes and a powerful suite of geospatial query operators. This module will walk you through how to store, index, and query location data efficiently in MongoDB.
2. Understanding Geospatial Data
Geospatial data represents geographic locations such as points (latitude and longitude), lines, and polygons. In MongoDB, geospatial data is stored using either legacy coordinate pairs or GeoJSON objects.
GeoJSON is the preferred format for use with 2dsphere indexes and is designed to support Earth’s spherical geometry.
Common GeoJSON Types:
- Point: A single location
- LineString: A path or road
- Polygon: An area like a park or a building outline
3. Types of Geospatial Indexes in MongoDB
MongoDB supports two main types of geospatial indexes:
- 2d indexes: For flat (Euclidean) geometry; used for legacy applications.
- 2dsphere indexes: For spherical geometry (Earth-like), ideal for real-world mapping applications.
In this module, we’ll focus on 2dsphere, which is the modern and most widely used option.
4. The 2dsphere Index Explained
A 2dsphere index supports queries that calculate geometries on an earth-like sphere, making it suitable for:
- Calculating distances between points
- Determining proximity or bounding areas
- Filtering documents based on spatial relationships
Use Case Examples:
- “Find restaurants within 3km of a user”
- “Locate all warehouses within a delivery zone”
5. Creating a 2dsphere Index
First, insert a document with a GeoJSON point:
db.places.insertOne({
name: "Central Park",
location: {
type: "Point",
coordinates: [-73.9654, 40.7829] // [longitude, latitude]
}
});
Then create a 2dsphere index on the location field:
db.places.createIndex({ location: "2dsphere" });
6. Storing GeoJSON Data
MongoDB supports various GeoJSON formats:
- Point:
{ type: "Point", coordinates: [longitude, latitude] } - LineString:
{ type: "LineString", coordinates: [[lng, lat], [lng, lat], ...] } - Polygon: Useful for defining zones and boundaries
Example of a polygon:
{
type: "Polygon",
coordinates: [[
[-73.97, 40.77],
[-73.98, 40.78],
[-73.96, 40.78],
[-73.97, 40.77]
]]
}
7. Geospatial Query Operators
MongoDB provides several operators for querying geospatial data:
$near: Returns documents ordered by proximity.$geoWithin: Returns documents located inside a specified geometry.$geoIntersects: Returns documents that intersect with a geometry.
8. Using $near and $geoWithin
$near Example:
db.places.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [-73.9667, 40.78]
},
$maxDistance: 2000 // meters
}
}
});
$geoWithin Example:
db.places.find({
location: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [[
[-73.98, 40.76],
[-73.97, 40.79],
[-73.95, 40.78],
[-73.98, 40.76]
]]
}
}
}
});
9. The $geoNear Aggregation Stage
$geoNear is used in aggregation pipelines and requires a 2dsphere index.
db.places.aggregate([
{
$geoNear: {
near: { type: "Point", coordinates: [-73.9667, 40.78] },
distanceField: "distance",
spherical: true,
maxDistance: 3000
}
}
]);
Key Options:
near: The central point.distanceField: Field to store the computed distance.spherical: Must betruefor 2dsphere.maxDistance/minDistance: Filter by distance in meters.
10. Real-World Use Cases
- Food Delivery App: Find all restaurants within a delivery radius.
- Cab Aggregator: Match passengers to nearby drivers in real-time.
- Retail: Suggest stores near the user.
- Emergency Services: Dispatch the nearest ambulance or fire truck.
- Event Planning: Recommend venues near a chosen location.
11. Best Practices for Geospatial Queries
- Always index the geospatial field with a
2dsphereindex. - Use GeoJSON format for compatibility and full feature support.
- Combine geospatial queries with regular filters for more efficient searches.
- Prefer
$geoNearinside aggregation for advanced use cases like sorting and filtering. - Be cautious with
$nearon large datasets—combine withlimitto reduce load.
12. Conclusion
MongoDB’s support for geospatial data is powerful and production-ready. By using 2dsphere indexes, GeoJSON formats, and operators like $geoNear and $geoWithin, you can build highly responsive location-based features in your applications.

