Query a 2dsphere Index
The following sections describe queries supported by the 2dsphere
index.
GeoJSON Objects Bounded by a Polygon
The $geoWithin
operator queries for location data foundwithin a GeoJSON polygon. Your locationdata must be stored in GeoJSON format. Use the following syntax:
- db.<collection>.find( { <location field> :
- { $geoWithin :
- { $geometry :
- { type : "Polygon" ,
- coordinates : [ <coordinates> ]
- } } } } )
The following example selects all points and shapes thatexist entirely within a GeoJSON polygon:
- db.places.find( { loc :
- { $geoWithin :
- { $geometry :
- { type : "Polygon" ,
- coordinates : [ [
- [ 0 , 0 ] ,
- [ 3 , 6 ] ,
- [ 6 , 1 ] ,
- [ 0 , 0 ]
- ] ]
- } } } } )
Intersections of GeoJSON Objects
The $geoIntersects
operator queries for locations thatintersect a specified GeoJSON object. A location intersects the objectif the intersection is non-empty. This includes documents that have ashared edge.
The $geoIntersects
operator uses the following syntax:
- db.<collection>.find( { <location field> :
- { $geoIntersects :
- { $geometry :
- { type : "<GeoJSON object type>" ,
- coordinates : [ <coordinates> ]
- } } } } )
The following example uses $geoIntersects
to select allindexed points and shapes that intersect with the polygon defined by thecoordinates
array.
- db.places.find( { loc :
- { $geoIntersects :
- { $geometry :
- { type : "Polygon" ,
- coordinates: [ [
- [ 0 , 0 ] ,
- [ 3 , 6 ] ,
- [ 6 , 1 ] ,
- [ 0 , 0 ]
- ] ]
- } } } } )
Proximity to a GeoJSON Point
Proximity queries return the points closest to the defined point andsorts the results by distance. A proximity query on GeoJSON datarequires a 2dsphere
index.
To query for proximity to a GeoJSON point, use either the$near
operator. Distance is in meters.
The $near
uses the following syntax:
- db.<collection>.find( { <location field> :
- { $near :
- { $geometry :
- { type : "Point" ,
- coordinates : [ <longitude> , <latitude> ] } ,
- $maxDistance : <distance in meters>
- } } } )
For examples, see $near
.
See also the $nearSphere
operator and the:pipeline:_$geoNear_aggregation pipeline stage.
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, seeCalculate Distance Using Spherical Geometry.
Use the following syntax:
- db.<collection>.find( { <location field> :
- { $geoWithin :
- { $centerSphere :
- [ [ <x>, <y> ] , <radius> ] }
- } } )
The following example queries grid coordinates and returns alldocuments within a 10 mile radius of longitude 88 W
and latitude30 N
. The example converts the distance, 10 miles, to radians bydividing by the approximate equatorial radius of the earth, 3963.2 miles:
- db.places.find( { loc :
- { $geoWithin :
- { $centerSphere :
- [ [ -88 , 30 ] , 10 / 3963.2 ]
- } } } )