Før jeg starter, vil jeg tilføje to punkter-
- Når du bruger mongo, skal du altid indsætte placeringer på [lang., lat.] måde
- Angiv venligst typen af geometri, du indsætter. Se mongoDB dokumentation for mere information om typer.
I forbindelse med din forespørgsel tilføjede jeg tre punkter som dit spørgsmål, og mine data ser ud som nedenfor-
> 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 ] }
Jeg har givet type:"Point", fordi dette er en reserveret nøgle til brug af sfæriske type placeringer i mongo. Desuden har jeg tilføjet [long, lat] for placering. Senere tilføjede jeg et 2dSphere-indeks på loc-feltet.
db.test.createIndex({loc:"2dsphere"})
Så udførte jeg nedenstående forespørgsel for at kende afstanden fra 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 }
Ovenstående forespørgsel er kun til testformål for at kende afstanden. Den fortæller afstanden i meter, så jeg nemt kan konvertere den til kms.
Nu kørte jeg nedenstående forespørgsel for at finde steder fra Marathahalli inden for 10 km. distance, og jeg fik mit ønskede resultat-
> db.test.find({ loc:{ $near:{ $geometry: {type: "Point" , coordinates:[77.6974,12.9591] }, $maxDistance:10000 }}})
{ "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ] }
Jeg fandt få problemer med den tilgang, du prøvede-
- Placeringer skal angives på [lang, lat] måde.
- type:"Punkt" skal angives for at bruge punkttypeplacering. Det er reserveret søgeord.
- Afstanden vil blive taget i meter her. Nogle steder er det også taget i radian i Mongo. Se venligst dette mongoDB doc for mere info om radianafstand.
Håber det hjælper dig...hav en god dag...:)