sql >> Database teknologi >  >> NoSQL >> MongoDB

mongodb filter dokumenter med længdegrad, breddegrad og med særlig afstand

Før jeg starter, vil jeg tilføje to punkter-

  1. Når du bruger mongo, skal du altid indsætte placeringer på [lang., lat.] måde
  2. 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...:)




  1. Fejl:Tilslut ETIMEDOUT 54.162.26.95:17185

  2. MongoDB, Java, sorter efter første array-indgang

  3. Noget som en tag-cache og forespørgsel på det for at foreslå dem ved at bruge Redis

  4. Hvad betød det egentlig, at MongoDB ikke var ACID-kompatibel før v4?