MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

documentos de filtro mongodb com longitude, latitude e com distância particular


Antes de começar eu acrescentaria dois pontos-
  1. Ao usar o mongo, sempre insira locais de maneira [long., lat.]
  2. Especifique o tipo de geometria que você está inserindo. Consulte a documentação do mongoDB para obter mais informações sobre os tipos.

Chegando à sua consulta, adicionei três pontos à sua pergunta e meus dados se parecem abaixo-
> db.test.find()
{ "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ] }
{ "_id" : "Majestic", "type" : "Point", "loc" : [ 77.5712, 12.9766 ] }
{ "_id" : "ShanthiNgr", "type" : "Point", "loc" : [ 77.6836, 12.8486 ] }

Eu dei o tipo:"Point" porque esta é uma chave reservada para usar locais do tipo esférico no mongo. Além disso, adicionei [long, lat] para localização. Mais tarde, adicionei um índice 2dSphere no campo loc.
db.test.createIndex({loc:"2dsphere"})

Então executei a consulta abaixo para saber a distância de Marathahalli [77.6974,12.9591]-
> db.test.aggregate([ {$geoNear: { near :{type: "Point", coordinates:[77.6974,12
.9591]}, distanceField: "distance", spherical: true } } ])
{ "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ], "distance": 9583.305405402776 }
{ "_id" : "ShanthiNgr", "type" : "Point", "loc" : [ 77.6836, 12.8486 ], "distance" : 12391.53898270671 }
{ "_id" : "Majestic", "type" : "Point", "loc" : [ 77.5712, 12.9766 ], "distance": 13828.057829128267 }

A consulta acima é apenas para fins de teste para saber a distância. Ele informa a distância em metros para que eu possa convertê-lo facilmente em kms.

Agora eu executei a consulta abaixo para encontrar locais de Marathahalli dentro de 10 km. distância e eu obtive o meu resultado desejado-
> db.test.find({ loc:{ $near:{ $geometry: {type: "Point" , coordinates:[77.6974,12.9591] }, $maxDistance:10000 }}})
{ "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ] }

Encontrei alguns problemas com a abordagem que você estava tentando -
  • Os locais devem ser fornecidos de maneira [longa, lat].
  • type:"Point" deve ser fornecido para usar a localização do tipo de ponto. É uma palavra-chave reservada.
  • A distância será medida em metros aqui. Em alguns lugares é tirada em radiano também em Mongo. Consulte este doc do mongoDB para obter mais informações sobre a distância em radianos.

Espero ter ajudado... tenha um bom dia... :)