MongoDB offers a number of indexes and query mechanisms to handle geospatial information. This section introduces MongoDB’s geospatial features.
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:
Spherical
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.
Flat
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 as
GeoJSON objects (preferred).
Queries on GeoJSON objects always calculate on a sphere. The default coordinate reference system for GeoJSON uses the WGS84 datum.
New in version 2.4: The storage and querying of GeoJSON objects is new in version 2.4. Prior to version 2.4, all geospatial data was stored as coordinate pairs.
MongoDB supports the following GeoJSON objects:
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 provides the following geospatial index types to support the geospatial queries:
2dsphere, which supports:
New in version 2.4: 2dsphere indexes are not available before version 2.4.
2d, which supports:
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:
See also