Geospatial Indexes and Queries
MongoDB offers a number of indexes and query mechanisms to handle
geospatial information. This section introduces MongoDB’s geospatial
features. For complete examples of geospatial queries in MongoDB, see
Geospatial Index Tutorials.
Before storing your location data and writing queries, you must decide
the type of surface to use to perform calculations. The type you choose
affects how you store data, what type of index to build, and the syntax
of your queries.
MongoDB offers two surface types:
To calculate geometry over an Earth-like sphere, store your
location data on a spherical surface and use 2dsphere index.
Store your location data as GeoJSON objects with this
coordinate-axis order: longitude, latitude. The coordinate
reference system for GeoJSON uses the WGS84 datum.
To calculate distances on a Euclidean plane, store your location data
as legacy coordinate pairs and use a 2d index.
If you choose spherical surface calculations, you store location data
Queries on GeoJSON objects always calculate on a sphere. The
default coordinate reference system for GeoJSON uses the WGS84
New in version 2.4: Support for GeoJSON storage and queries is new in version
2.4. Prior to version 2.4, all geospatial data used coordinate
MongoDB supports the following GeoJSON objects:
Legacy Coordinate Pairs
MongoDB supports spherical surface calculations on legacy
coordinate pairs by converting the data to the GeoJSON Point type.
If you choose flat surface calculations, you can store data only as
legacy coordinate pairs.
MongoDB’s geospatial query operators let you query for:
MongoDB can query for locations contained entirely within a
specified polygon. Inclusion queries use the $geoWithin
MongoDB can query for locations that intersect with a specified
geometry. These queries apply only to data on a spherical
surface. These queries use the $geoIntersects operator.
MongoDB can query for the points nearest to another
point. Proximity queries use the $near operator. The
$near operator requires a 2d or 2dsphere index.
MongoDB provides the following geospatial index types to support the
2dsphere indexes support:
- Calculations on a sphere
- Both GeoJSON objects and legacy coordinate pairs
- A compound index with scalar index fields (i.e. ascending or
descending) as a prefix or suffix of the 2dsphere index field
New in version 2.4: 2dsphere indexes are not available before version 2.4.
2d indexes support:
- Calculations using flat geometry
- Legacy coordinate pairs (i.e., geospatial points on a flat
- A compound index with only one additional field, as a suffix of the
2d index field
Geospatial Indexes and Sharding
You cannot use a geospatial index as the shard key index.
You can create and maintain a geospatial index on
a sharded collection if using different fields as the shard key.
Queries using $near are not supported for sharded
collections. Use geoNear instead. You also can query for
geospatial data using $geoWithin.
The following pages provide complete documentation for geospatial
indexes and queries:
- 2dsphere Indexes
- A 2dsphere index supports queries that calculate geometries on an
earth-like sphere. The index supports data stored as both GeoJSON
objects and as legacy coordinate pairs.
- 2d Indexes
- The 2d index supports data stored as legacy coordinate pairs and is
intended for use in MongoDB 2.2 and earlier.
- Haystack Indexes
- A haystack index is a special index optimized to return results over
small areas. For queries that use spherical geometry, a 2dsphere
index is a better option than a haystack index.
- 2d Index Internals
- Provides a more in-depth explanation of the internals of
geospatial indexes. This material is not necessary for normal
operations but may be useful for troubleshooting and for further