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 |
|---|---|
| A collection a ser consultada. |
| 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. |
| |
| 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: