As seções seguintes descrevem as consultas suportadas pelo índice 2dsphere .
Objeto GeoJSON delimitados por um polígono
O operador $geoWithin consulta os dados de localização encontrados dentro de um polígono GeoJSON. Seus dados de localização devem ser armazenados no formato GeoJSON. Use a seguinte sintaxe:
db.<collection>.find( { <location field> :                          { $geoWithin :                            { $geometry :                              { type : "Polygon" ,                                coordinates : [ <coordinates> ]                       } } } } ) 
O exemplo seguinte seleciona todos os pontos e formas que existem inteiramente dentro de um polígono GeoJSON:
db.places.find( { loc :                   { $geoWithin :                     { $geometry :                       { type : "Polygon" ,                         coordinates : [ [                                           [ 0 , 0 ] ,                                           [ 3 , 6 ] ,                                           [ 6 , 1 ] ,                                           [ 0 , 0 ]                                         ] ]                 } } } } ) 
Interseções de objetos GeoJSON
O operador $geoIntersects faz query nos locais que cruzam um objeto GeoJSON especificado. Um local cruza o objeto se a interseção não estiver vazia. Isso inclui documentos que têm uma borda compartilhada.
O operador $geoIntersects utiliza a seguinte sintaxe:
db.<collection>.find( { <location field> :                          { $geoIntersects :                            { $geometry :                              { type : "<GeoJSON object type>" ,                                coordinates : [ <coordinates> ]                       } } } } ) 
O exemplo a seguir usa $geoIntersects para selecionar todos os pontos e formas indexados que interseccionam com o polígono definido pela array coordinates .
db.places.find( { loc :                   { $geoIntersects :                     { $geometry :                       { type : "Polygon" ,                         coordinates: [ [                                          [ 0 , 0 ] ,                                          [ 3 , 6 ] ,                                          [ 6 , 1 ] ,                                          [ 0 , 0 ]                                        ] ]                 } } } } ) 
Proximidade de um ponto GeoJSON
As queries de proximidade retornam os pontos mais próximos do ponto definido e classificam os resultados por distância. Uma query de proximidade em dados GeoJSON requer um índice 2dsphere .
Para fazer uma query para proximidade de um ponto GeoJSON, utilize o operador $near . A distância está em metros.
O $near utiliza a seguinte sintaxe:
db.<collection>.find( { <location field> :                          { $near :                            { $geometry :                               { type : "Point" ,                                 coordinates : [ <longitude> , <latitude> ] } ,                              $maxDistance : <distance in meters>                       } } } ) 
Para obter exemplos, consulte $near.
Consulte também o operador $nearSphere e o estágio do aggregation pipeline $geoNear .
ponto dentro de um círculo definido em uma esfera
Para selecionar todas as coordenadas de grade em uma "limite esférica" em uma esfera, use $geoWithin com o operador $centerSphere . Especifique uma matriz que contenha:
- As coordenadas de grade do ponto central do círculo 
- O raio do círculo em radianos. Para calcular radianos, consulte Calcular distância usando geometria esférica. 
Use a seguinte sintaxe:
db.<collection>.find( { <location field> :                          { $geoWithin :                            { $centerSphere :                               [ [ <x>, <y> ] , <radius> ] }                       } } ) 
O exemplo a seguir faz query de coordenadas de grade e retorna todos os documento em um raio de 10 milhas da longitude 88 W e da latitude 30 N. O exemplo converte a distância, 10 milhas, para radianos dividindo pelo raio equatorial aproximado da Terra, 3963,2 milhas:
db.places.find( { loc :                   { $geoWithin :                     { $centerSphere :                        [ [ -88 , 30 ] , 10 / 3963.2 ]                 } } } )