MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

mongodb filtre les documents avec la longitude, la latitude et avec une distance particulière

Avant de commencer, j'ajouterais deux points-

  1. Lorsque vous utilisez mongo, insérez toujours les emplacements de manière [long., lat.]
  2. Veuillez spécifier le type de géométrie que vous insérez. Reportez-vous à la documentation de mongoDB pour plus d'informations sur les types.

En ce qui concerne votre requête, j'ai ajouté trois points à votre question et mes données ressemblent à celles ci-dessous-

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

J'ai donné le type :"Point" car il s'agit d'une clé réservée pour l'utilisation d'emplacements de type sphérique dans mongo. De plus, j'ai ajouté [long, lat] pour l'emplacement. Plus tard, j'ai ajouté un index 2dSphere sur le champ loc.

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

Ensuite, j'ai exécuté la requête ci-dessous pour connaître la distance 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 }

La requête ci-dessus est juste à des fins de test pour connaître la distance. Il indique la distance en mètres afin que je puisse facilement la convertir en km.

Maintenant, j'ai exécuté la requête ci-dessous pour trouver des emplacements de Marathahalli dans un rayon de 10 km. distance et j'ai obtenu le résultat souhaité-

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

J'ai trouvé quelques problèmes avec l'approche que vous essayiez-

  • Les emplacements doivent être indiqués en [long, lat].
  • type :"Point" doit être donné pour utiliser l'emplacement du type de point. C'est un mot-clé réservé.
  • La distance sera prise en mètres ici. À quelques endroits, il est également pris en radian à Mongo. Veuillez consulter ceci mongoDB doc pour plus d'informations sur la distance en radians.

J'espère que cela vous aidera... passez une bonne journée... :)