sql >> Database >  >> NoSQL >> MongoDB

mongodb filtert documenten met lengtegraad, breedtegraad en met een bepaalde afstand

Voordat ik begon, zou ik twee punten toevoegen-

  1. Voer bij gebruik van mongo altijd locaties in [lang., lat.] in
  2. Geef het type geometrie op dat u invoegt. Raadpleeg mongoDB documentatie voor meer informatie over soorten.

Naar aanleiding van uw vraag heb ik drie punten toegevoegd als uw vraag en mijn gegevens zien er als volgt uit-

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

Ik heb type:"Point" gegeven omdat dit een gereserveerde sleutel is voor het gebruik van sferische typelocaties in mongo. Bovendien heb ik [long, lat] voor locatie toegevoegd. Later heb ik een 2dSphere-index toegevoegd aan het loc-veld.

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

Vervolgens heb ik onderstaande query uitgevoerd om de afstand tot Marathahalli te weten [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 }

Bovenstaande vraag is alleen voor testdoeleinden om de afstand te kennen. Het geeft de afstand aan in meters, zodat ik het gemakkelijk kan omzetten in km's.

Nu heb ik onderstaande query uitgevoerd om locaties van Marathahalli binnen 10 km te vinden. afstand en ik kreeg mijn gewenste resultaat-

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

Ik heb weinig problemen gevonden met de aanpak die u probeerde-

  • Locaties moeten op [long, lat]-manier worden opgegeven.
  • type:"Punt" moet worden opgegeven om de locatie van het punttype te gebruiken. Het is een gereserveerd zoekwoord.
  • De afstand wordt hier in meters gemeten. Op enkele plaatsen is het ook in radiaal genomen in Mongo. Raadpleeg dit mongoDB-document voor meer informatie over radiale afstand.

Ik hoop dat het je helpt...een fijne dag verder...:)




  1. Hoe has_many te implementeren:via relaties met Mongoid en mongodb?

  2. MongoDB $ min

  3. node.js slaat objecten op in redis

  4. Hoe alle sleutels en de bijbehorende waarden uit de redis-database in c# te krijgen, bij te werken?