Você pode fazer query dos dados de localização que aparecem próximos a um ponto especificado em uma superfície plana.
Para consultar dados de localização próximos a um ponto especificado, utilize o operador $near :
db.<collection>.find( { <location field> : { $near : [ <longitude>, <latitude> ], $maxDistance : <distance in meters> } } )
Sobre esta tarefa
Ao especificar pares de coordenadas no operador
$near, liste primeiro a longitude e, em seguida, a latitude.Os valores de longitude válidos estão entre
-180e180, ambos inclusos.Os valores de latitude válidos estão entre
-90e90, ambos inclusos.
Especifique a distância no campo
$maxDistanceem metros.
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
addresscontém pares de coordenadas legados.Para executar query de dados de localização com o operador
$near, você deve criar um índice geoespacial no campo que contém os dados de localização.Criar um índice 2d no campo
address:db.contacts.createIndex( { address: "2d" } )
Procedimento
Use $near para fazer a query da collection. A seguinte query $near retorna documentos que têm um campo address dentro de 50 metros do par de coordenadas [ -73.92, 40.78 ]:
db.contacts.find( { address: { $near: [ -73.92, 40.78 ], $maxDistance : 50 } } )
Saída:
[ { _id: ObjectId("640a3dd9c639b6f094b00e89"), name: 'Georgine Lestaw', phone: '714-555-0107', address: [ -74, 44.74 ] } ]
Os resultados são classificados por distância do ponto de consulta , do mais próximo ao mais distante.
Saiba mais
Para executar query de proximidade em uma superfície esférica, consulte query para localizações próximas a um Point em uma esfera.