2016-03-29 11 views
-1

Ich versuche ein Dokument in Mongoose zu laden, wenn es 10 Kilometer von einer aktuellen Lat/Lon-Koordinate entfernt ist.Mungo ergreift ein Dokument für eine bestimmte Entfernung von einer Längen- und Breitengradkoordinate

Also lassen Sie uns sagen, ich habe diese Aufgabe:

{ 
    lat: -33.9493992, 
    lon: 151.1114885 
} 

Und in meiner Mongoose Datenbank habe ich eine Sammlung und jedes Dokument innerhalb dieser Sammlung auch die lat-lon Tasten speichern. Wie kann ich nur Einträge mit einer bestimmten Entfernung von einer bestimmten Koordinate erfassen?

So zum Beispiel möchte ich nur die Dokumente greifen, die bis zu 10 Kilometer von der oben genannten Koordinate entfernt sind.

Ich würde jede Hilfe zu schätzen wissen.

EDIT: Mein Code:

Initialisierung des Modells:

var schema = new mongoose.Schema({ 
title: String, 
    title: String, 
    coordinates: { 
     type: [ Number ], 
     default: [0, 0], 
     index: '2dsphere' 
    } 
}); 

global.models.Point = mongoose.model('Point', schema); 

und der Code versucht, in das Modell zu finden: router.route ('/ Punkte /: Breite /: lon ') .get (function (req, res) { console.log (' lat: '+ req.params.lat +' lon:‘+ req.params.lon);

 global.models.Point.find({ 
      coordinates: { 
       $near: { 
        $maxDistance: 100/111.12, 
        $geometry: { 
         type: 'Point', 
         coordinates: [req.params.lon, req.params.lat] 
        } 
       } 
      } 
     }, function (err, res) { 
      if (err) { 
       return console.log(err); 
      } 
      console.log(res); 
     }); 
    }); 

Das Objekt, wie es in der Datenbank Sammlung gespeichert ist:

{ 
    "_id" : ObjectId("56ea103eefedec96b6d4b203"), 
    "title" : "Some title", 
    "coordinates" : [ 
     5.2260167, 
     52.3500607 
    ] 
} 
+1

Lesen Sie die Dokumentation. ['$ nearsphere'] (https://docs.mongodb.org/manual/reference/operator/query/nearSphere/). Sie möchten keine separaten Eigenschaften. In der Dokumentation erfahren Sie, wie Ihr Dokument die Daten speichern soll. –

Antwort

0

In Ihrem Schema Sie folgend ein Feld definiert haben müssen:

location: { 
    type: [ Number ], 
    default: [ 0, 0 ], 
    index: '2dsphere' 
} 

Dann können Sie Suchvorgänge auf es tun, wie dass:

Model.find({ 
    location: { 
    $near: { 
     $maxDistance: 100/111.12, // 100km 
     $geometry: { 
     type: "Point", 
     coordinates: [151.1114885, -33.9493992] // [lon, lat]  
     } 
    } 
    } 
}).exec(callback); 

Erläuterung Hinweis für $maxDistance:

1° latitude = 69.047 miles = 111.12 kilometers

+0

Hey danke für die Antwort. Muss ich die definierten Felder definieren, wenn ich das Modell mit mongoose modelSchema einleite? Ich habe das gemacht und ich bekomme "undefiniert" als Ergebnis ... –

+0

@ArielWeinberger aktualisiert Antwort –

+0

Ich bekomme ein leeres Objekt, da muss etwas in meinem Schema falsch sein. Ich werde meine Frage mit der Schemadefinition aktualisieren. Ich würde mich über Hilfe freuen. Vielen Dank Oleg. –