Avant de commencer, j'ajouterais deux points-
- Lorsque vous utilisez mongo, insérez toujours les emplacements de manière [long., lat.]
- 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... :)