- Indexes >
- Indexing Tutorials >
- Geospatial Index Tutorials >
- Create a
2dsphere
Index
Create a 2dsphere
Index¶
On this page
To create a geospatial index for GeoJSON-formatted data, use the
db.collection.ensureIndex()
method to create a 2dsphere
index. In the index specification document for the
db.collection.ensureIndex()
method, specify the location
field as the index key and specify the string literal "2dsphere"
as
the value:
The following procedure presents steps to populate a collection with documents that contain a GeoJSON data field and create 2dsphere indexes. Although the procedure populates the collection first, you can also create the indexes before populating the collection.
Procedure¶
First, populate a collection places
with documents that store
location data as GeoJSON Point in a field named loc
. The
coordinate order is longitude, then latitude.
Then, create the 2dsphere index.
Create a 2dsphere
Index¶
For example, the following creates a 2dsphere
index on the location field loc
:
Create a Compound Index with 2dsphere
Index Key¶
A compound index can include a
2dsphere
index key in combination with non-geospatial index keys.
For example, the following operation creates a compound index where the
the first key loc
is a 2dsphere
index key, and the remaining
keys category
and names
are non-geospatial index keys,
specifically descending (-1
) and ascending (1
) keys
respectively.
Unlike the 2d index, a compound 2dsphere
index
does not require the location field to be the first field indexed. For
example:
Considerations¶
The geoNear
command and the $geoNear
pipeline
stage require that a collection have at most only one
2dsphere
index and/or only one 2d index whereas
geospatial query operators (e.g.
$near
and $geoWithin
) permit collections to have
multiple geospatial indexes.
The geospatial index restriction for the geoNear
command
and the $geoNear
pipeline stage exists because neither the
geoNear
command nor the $geoNear
pipeline
stage syntax includes the location field. As such, index selection
among multiple 2d
indexes or 2dsphere
indexes is ambiguous.
No such restriction applies for geospatial query operators since these operators take a location field, eliminating the ambiguity.
As such, although this tutorial creates multiple 2dsphere
indexes, to use the geoNear
command or the
$geoNear
pipeline stage against the example collection, you
will need to drop
all but one of
the 2dsphere
indexes.
To query using the 2dsphere
index, see
Query a 2dsphere Index.