Query a 2dsphere Index
On this page
The following sections describe queries supported by the 2dsphere
index.
GeoJSON Objects Bounded by a Polygon
The $geoWithin
operator queries for location data found within a GeoJSON polygon. Your location data must be stored in GeoJSON format. Use the following syntax:
The following example selects all points and shapes that exist entirely within a GeoJSON polygon:
Intersections of GeoJSON Objects
The $geoIntersects
operator queries for locations that intersect a specified GeoJSON object. A location intersects the object if the intersection is non-empty. This includes documents that have a shared edge.
The $geoIntersects
operator uses the following syntax:
The following example uses $geoIntersects
to select all indexed points and shapes that intersect with the polygon defined by the coordinates
array.
Proximity to a GeoJSON Point
Proximity queries return the points closest to the defined point and sorts the results by distance. A proximity query on GeoJSON data requires a 2dsphere
index.
To query for proximity to a GeoJSON point, use either the $near
operator or geoNear
command. Distance is in meters.
The $near
uses the following syntax:
For examples, see $near
.
The geoNear
command uses the following syntax:
The geoNear
command offers more options and returns more information than does the $near
operator. To run the command, see geoNear
.
Points within a Circle Defined on a Sphere
To select all grid coordinates in a “spherical cap” on a sphere, use $geoWithin
with the $centerSphere
operator. Specify an array that contains:
- The grid coordinates of the circle’s center point
- The circle’s radius measured in radians. To calculate radians, see Calculate Distance Using Spherical Geometry.
Use the following syntax:
The following example queries grid coordinates and returns all documents within a 10 mile radius of longitude 88 W
and latitude 30 N
. The example converts the distance, 10 miles, to radians by dividing by the approximate equatorial radius of the earth, 3963.2 miles: