Definição
$polygonEspecifica um polígono para uma query geoespacial
$geoWithinem legacy coordinate pairs. A query retorna pares que estão dentro dos limites do polígono. O operador não executa queries para objetos GeoJSON.Para definir o polígono, especifique uma array de pontos de coordenadas:
{ <location field>: { $geoWithin: { $polygon: [ [ <x1> , <y1> ], [ <x2> , <y2> ], [ <x3> , <y3> ], ... ] } } } O último ponto está sempre implicitamente ligado ao primeiro. Você pode especificar quantos pontos, ou seja, lados, desejar.
Importante
Se você utilizar longitude e latitude, especifique longitude primeiro.
Comportamento
O operador $polygon calcula distâncias utilizando geometria plana (planar).
Os aplicativos podem utilizar o $polygon sem ter um índice geoespacial. No entanto, os índices geoespaciais suportam queries muito mais rápidas do que os equivalentes não indexados.
Exemplo
A seguinte query retorna todos os documentos que têm coordenadas que existem dentro do polígono definido por [ 0 , 0 ], [ 3 , 6 ] e [ 6 , 0 ]:
db.places.find( { loc: { $geoWithin: { $polygon: [ [ 0 , 0 ], [ 3 , 6 ], [ 6 , 0 ] ] } } } )