Consulta de locais dentro de um perímetro em uma superfície plana
Para executar query de dados de localização dentro de uma forma especificada em uma superfície plana, utilize o operador $geoWithin
. Para usar $geoWithin
com dados que aparecem em uma superfície plana, use esta sintaxe:
db.<collection>.find( { <location field> : { $geoWithin : { <shape operator> : <coordinates> } } } )
Substitua estes valores pela sua query:
Campo | Descrição |
---|---|
<collection> | A collection a ser consultada. |
<location field> | O campo que contém seus dados de localização. Para query em uma superfície plana, seus dados devem ser armazenados como legacy coordinate pairs. |
<shape operator> | |
<coordinates> | As coordenadas que definem as bordas da forma a serem query. Quando usadas com o operador Quando você especificar coordenadas de longitude e latitude, liste primeiro a longitude e depois a latitude.
|
Sobre esta tarefa
$geoWithin
não exige um índice geoespacial. No entanto, um índice geoespacial melhora o desempenho da query.
Antes de começar
Crie a coleção contacts
:
db.contacts.insertMany( [ { name: "Evander Otylia", phone: "202-555-0193", address: [ 55.5, 42.3 ] }, { name: "Georgine Lestaw", phone: "714-555-0107", address: [ -74, 44.74 ] } ] )
O campo address
contém pares de coordenadas legados.
Procedimento
Utilize $geoWithin
para query a collection contacts
. A query $geoWithin
a seguir usa o operador $box
para retornar documentos que aparecem dentro de um retângulo especificado:
db.contacts.find( { address: { $geoWithin: { $box: [ [ 49, 40 ], [ 60, 60 ] ] } } } )
Saída:
[ { _id: ObjectId("647e4e496cdaf4dc323ec92a"), name: 'Evander Otylia', phone: '202-555-0193', address: [ 55.5, 42.3 ] } ]
Os valores do operador $box
representam os cantos inferior esquerdo e superior direito do retângulo para a query.
A query $geoWithin
mostrada anteriormente retorna documentos que estão dentro de um retângulo que tem estes vér acessos:
[ 49, 40 ]
[ 49, 60 ]
[ 60, 60 ]
[ 60, 40 ]
Saiba mais
Para saber como usar o operador $geoWithin
com outras formas, consulte estas páginas: