sql >> Databasteknik >  >> NoSQL >> MongoDB

mongodb filtrerar dokument med longitud, latitud och med särskilt avstånd

Innan jag började skulle jag lägga till två punkter-

  1. När du använder mongo, infoga alltid platser på [long., lat.] sätt
  2. Ange vilken typ av geometri du infogar. Se mongoDB dokumentation för mer information om typer.

När jag kom till din fråga lade jag till tre punkter som din fråga och mina uppgifter ser ut som nedan-

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

Jag har angett typ:"Point" eftersom detta är en reserverad nyckel för att använda sfäriska typplatser i mongo. Dessutom har jag lagt till [long, lat] för plats. Senare lade jag till ett 2dSphere-index på loc-fältet.

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

Sedan körde jag nedanstående fråga för att veta avståndet från 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 }

Ovanstående fråga är bara i testsyfte för att veta avståndet. Den anger avstånd i meter så att jag enkelt kan omvandla den till km.

Nu körde jag nedanstående fråga för att hitta platser från Marathahalli inom 10 km. avstånd och jag fick mitt önskade 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 ] }

Jag hittade några problem med tillvägagångssättet du försökte-

  • Platser måste anges på [långt, lat] sätt.
  • typ:"Point" måste anges för att använda punkttypsplats. Det är ett reserverat sökord.
  • Avstånd kommer att tas i meter här. På några få ställen tas den i radian också i Mongo. Se denna mongoDB doc för mer information om radian avstånd.

Hoppas det hjälper dig...ha en bra dag...:)




  1. Mongodb scala drivrutin codec för egenskaper och ärvda klasser

  2. Hur man använder $and operator i mongodb - java drivrutin

  3. Meteor och DBRefs

  4. MONGODB [DEBUG] cursor.refresh() för markören 7078636577051629992