sql >> Base de Datos >  >> NoSQL >> MongoDB

documentos de filtro mongodb con longitud, latitud y con distancia particular

Antes de comenzar, agregaría dos puntos-

  1. Cuando use mongo, siempre inserte ubicaciones en [long., lat.] manera
  2. Por favor, especifique el tipo de geometría que está insertando. Consulte mongoDB documentación para obtener más información sobre los tipos.

En cuanto a su consulta, agregué tres puntos como su pregunta y mis datos se ven a continuación:

> 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 ] }

He dado el tipo:"Punto" porque esta es una clave reservada para usar ubicaciones de tipo esférico en mongo. Además, agregué [long, lat] para la ubicación. Más tarde, agregué un índice 2dSphere en el campo loc.

db.test.createIndex({loc:"2dsphere"})

Luego ejecuté la siguiente consulta para saber la distancia desde 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 }

La consulta anterior es solo para fines de prueba para conocer la distancia. Dice la distancia en metros para que pueda convertirla fácilmente en km.

Ahora ejecuté debajo de la consulta para encontrar ubicaciones de Marathahalli dentro de los 10 kms. distancia y obtuve el resultado deseado-

> db.test.find({ loc:{ $near:{ $geometry: {type: "Point" , coordinates:[77.6974,12.9591] }, $maxDistance:10000 }}})
{ "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ] }

Encontré algunos problemas con el enfoque que estabas intentando-

  • Las ubicaciones deben darse en forma [long, lat].
  • tipo:"Punto" debe proporcionarse para usar la ubicación del tipo de punto. Es una palabra clave reservada.
  • La distancia se tomará en metros aquí. En algunos lugares también se toma en radianes en Mongo. Consulte this mongoDB doc para obtener más información sobre la distancia en radianes.

Espero que te ayude... que tengas un buen día... :)