Definição
- $geoWithin
- Seleciona documentos com dados geoespaciais que existem inteiramente dentro de uma forma especificada. - A forma especificada pode ser um GeoJSON - Polygon(com uma ou várias conexões), um GeoJSON- MultiPolygonou uma forma definida por legacy coordinate pairs. O operador- $geoWithinutiliza o operador- $geometrypara especificar o objeto GeoJSON.- Para especificar um polígono ou vários polígonos GeoJSON utilizando o sistema de referência de coordenadas padrão (CRS), utilize a seguinte sintaxe: - { - <location field>: { - $geoWithin: { - $geometry: { - type: <"Polygon" or "MultiPolygon"> , - coordinates: [ <coordinates> ] - } - } - } - } - Para queries do - $geoWithinque especificam geometrias GeoJSON com áreas maiores que um único hemisfério, o uso do CRS padrão resulta em queries para as geometrias complementares.- Para especificar um polígono GeoJSON com um MongoDB CRS personalizado, utilize o seguinte protótipo que especifica o MongoDB CRS personalizado na expressão - $geometry:- { - <location field>: { - $geoWithin: { - $geometry: { - type: "Polygon" , - coordinates: [ <coordinates> ], - crs: { - type: "name", - properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" } - } - } - } - } - } - O CRS personalizado do MongoDB usa uma ordem de enrolamento no sentido anti-horário e permite que - $geoWithinaceite queries com um polígono GeoJSON de anel único cuja área seja maior ou igual a um único hemisfério. Se o polígono especificado for menor que um único hemisfério, o comportamento do- $geoWithincom o CRS do MongoDB será o mesmo que com o CRS padrão. Veja também Polígonos "big".- Se estiver consultando a inclusão em uma forma definida por pares de coordenadas legados em um plano, use a seguinte sintaxe: - { - <location field>: { - $geoWithin: { <shape operator>: <coordinates> } - } - } - Os operadores de formas disponíveis são: - $center(define um círculo) e
- $centerSphere(define um círculo em uma esfera).
 - Importante- Se você utilizar longitude e latitude, especifique coordenadas em ordem de - longitude, latitude.
Comportamento
Índices geoespaciais
$geoWithin não exige um índice geoespacial. No entanto, um índice geoespacial melhorará o desempenho da query. Ambos os índices geoespaciais 2dsphere e 2d suportam $geoWithin.
Resultados não ordenados
O operador $geoWithin não retorna resultados ordenados. Dessa forma, o MongoDB pode retornar consultas $geoWithin mais rapidamente do que as consultas geoespaciais $near ou $nearSphere, que ordenam os resultados.
Degeneração geométrica
$geoWithin não garante que considerará que uma geometria contém sua geometria componente ou outro polígono compartilhando sua geometria componente.
Polígonos "big"
Por $geoWithin, se você especificar um polígono de anel único que tenha uma área maior que um único hemisfério, inclua o sistema de referência de coordenadas personalizado do MongoDB na expressão $geometry. Caso contrário, $geoWithin consultará a geometria complementar. Para todos os outros polígonos GeoJSON com áreas maiores que um hemisfério, $geoWithin consultará a geometria complementar.
Exemplos
Dentro de um polígono
O exemplo seguinte seleciona todos os dados loc que existem inteiramente dentro de um GeoJSON Polygon. A área do polígono é menor que a área de um único hemisfério:
db.places.find(    {      loc: {        $geoWithin: {           $geometry: {              type : "Polygon" ,              coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ]           }        }      }    } ) 
Para polígonos anelares únicos com áreas maiores que um único hemisfério, consulte Dentro de um polígono "grande".
Dentro de um polígono "grande"
Para executar query com um polígono GeoJSON de anel único cuja área é maior que um único hemisfério, a expressão $geometry deve especificar o sistema de referência de coordenadas MongoDB personalizado. Por exemplo:
db.places.find(    {      loc: {        $geoWithin: {           $geometry: {              type : "Polygon" ,              coordinates: [                [                  [ -100, 60 ], [ -100, 0 ], [ -100, -60 ], [ 100, -60 ], [ 100, 60 ], [ -100, 60 ]                ]              ],              crs: {                 type: "name",                 properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" }              }           }        }      }    } )