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

Mongoose-Aufrufe an geoNear mit GeoJSON-Punkten als Abfrageparameter funktionieren nicht

Das Problem war die falsche Verwendung von maxDistance. Der folgende Ausdruck hat funktioniert.


Branch.geoNear({type: "Point", coordinates: [0.0776590, -33.7797590]}, {
  spherical: true, 
  maxDistance: 1 / 6378137, 
  distanceMultiplier: 6378137
})
  .then(function (doc) {
    console.log(doc);
    process.exit();
  });


Mongoose: branches.ensureIndex({ location: '2dsphere' }) { safe: undefined, background: true }  
Mongoose: branches.geoNear(0.077659) -33.779759 { distanceMultiplier: 6378137, lean: true, maxDistance: 1.567855942887398e-7, spherical: true } 
[]

Jetzt erkennt die Abfrage korrekt, dass sich die beiden Dokumente in der Sammlung nicht innerhalb von 1 Meter vom abgefragten Ort befinden. Auch die Abfrage eines Standorts in der Nähe unseres Zuhauses liefert die erwarteten Ergebnisse.


Branch.geoNear({type: "Point", coordinates: [153.027117, -27.468515]}, {
  spherical: true, 
  maxDistance: 1 / 6378137, 
  distanceMultiplier: 6378137
})
  .then(function (doc) {
    console.log(doc);
    process.exit();
  });

Mongoose: branches.ensureIndex({ location: '2dsphere' }) { safe: undefined, background: true }  
Mongoose: branches.geoNear(153.027117) -27.468515 { distanceMultiplier: 6378137, lean: true, maxDistance: 1.567855942887398e-7, spherical: true } 
[ { dis: 0.0026823704060803567,
    obj: 
     { name: 'A',
       _id: 533200e49ba06bec37c0cc22,
       location: [Object],
       __v: 0 } } ]

Die Lösung?

In der MongoDb-Dokumentation von geoNear heißt es, dass maxDistance bei Verwendung eines geoJSON-Objekts in Metern und bei Verwendung von Koordinatenpaaren im Bogenmaß angegeben werden sollte.

Das ist entweder falsch, oder ich verstehe es falsch.

Wie Sie oben sehen können, wird für maxDistance nicht 1 Meter, sondern Radian angegeben.