- Indexes >
- Indexing Tutorials >
- Geospatial Index Tutorials >
- Query a 2dsphere Index
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:
db.<collection>.find( { <location field> :
{ $geoWithin :
{ $geometry :
{ type : "Polygon" ,
coordinates : [ <coordinates> ]
} } } } )
The following example selects all points and shapes that exist 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¶
New in version 2.4.
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:
db.<collection>.find( { <location field> :
{ $geoIntersects :
{ $geometry :
{ type : "<GeoJSON object type>" ,
coordinates : [ <coordinates> ]
} } } } )
The following example uses $geoIntersects to select all indexed points and shapes that intersect with the polygon defined by the coordinates 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 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:
db.<collection>.find( { <location field> :
{ $near :
{ $geometry :
{ type : "Point" ,
coordinates : [ <longitude> , <latitude> ] } ,
$maxDistance : <distance in meters>
} } } )
For examples, see $near.
The geoNear command uses the following syntax:
db.runCommand( { geoNear : <collection> ,
near : { type : "Point" ,
coordinates: [ <longitude>, <latitude> ] } ,
spherical : true } )
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:
db.<collection>.find( { <location field> :
{ $geoWithin :
{ $centerSphere :
[ [ <x>, <y> ] , <radius> ] }
} } )
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:
db.places.find( { loc :
{ $geoWithin :
{ $centerSphere :
[ [ -88 , 30 ] , 10 / 3963.2 ]
} } } )
Thank you for your feedback!
We're sorry! You can Report a Problem to help us improve this page.