MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

mongodb filtert Dokumente mit Längengrad, Breitengrad und mit bestimmter Entfernung

Bevor ich anfange, würde ich zwei Punkte hinzufügen-

  1. Wenn Sie Mongo verwenden, fügen Sie Orte immer in [Long., Lat.]-Form ein
  2. Bitte geben Sie den Geometrietyp an, den Sie einfügen. Siehe mongoDB Dokumentation für weitere Informationen zu Typen.

Um zu Ihrer Frage zu kommen, habe ich Ihrer Frage drei Punkte hinzugefügt und meine Daten sehen wie folgt aus:

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

Ich habe type:"Point" angegeben, da dies ein reservierter Schlüssel für die Verwendung von Orten mit sphärischem Typ in Mongo ist. Außerdem habe ich [long, lat] für den Ort hinzugefügt. Später habe ich einen 2dSphere-Index für das loc-Feld hinzugefügt.

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

Dann habe ich die folgende Abfrage ausgeführt, um die Entfernung von Marathahalli zu erfahren [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 }

Die obige Abfrage dient nur zu Testzwecken, um die Entfernung zu ermitteln. Die Entfernung wird in Metern angegeben, sodass ich sie leicht in km umrechnen kann.

Jetzt habe ich die folgende Abfrage ausgeführt, um Standorte von Marathahalli innerhalb von 10 km zu finden. Entfernung und ich habe mein gewünschtes Ergebnis-

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

Ich habe einige Probleme mit dem von Ihnen versuchten Ansatz gefunden-

  • Standorte müssen in [lang, lat] angegeben werden.
  • type:"Point" muss angegeben werden, um die Ortung des Punkttyps zu verwenden. Es ist ein reserviertes Schlüsselwort.
  • Entfernungen werden hier in Metern angegeben. An wenigen Stellen wird in Mongo auch im Bogenmaß gemessen. Bitte lesen Sie dies mongoDB doc für weitere Informationen zur Entfernung im Bogenmaß.

Hoffe, es hilft dir... einen schönen Tag noch...:)