The $geoIntersects operator queries for locations that intersect a specified GeoJSON object. A location inter- sects 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 . 

