sql >> Database >  >> NoSQL >> MongoDB

Mongoose roept geoNear aan met GeoJSON-punten omdat queryparameters niet werken

Het probleem was het onjuist gebruiken van maxDistance. De volgende uitdrukking werkte.


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

Nu ontdekt de query correct dat de twee documenten in de collectie zich niet binnen 1 meter van de opgevraagde locatie bevinden. Het opvragen van een locatie dichter bij huis geeft ons ook de verwachte resultaten.


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

De oplossing?

MongoDb-documentatie van geoNear stelt dat bij gebruik van een geoJSON-object maxDistance in meters moet zijn en in radialen als coördinatenparen worden gebruikt.

Dit is ofwel verkeerd, of mijn begrip ervan is verkeerd.

Zoals u hierboven kunt zien, wordt deze in radialen geleverd in plaats van 1 meter op te geven voor maxDistance.



  1. Hoe een mangoestschema te maken met een reeks object-ID's?

  2. Fout:sluit ETIMEDOUT aan tijdens het schrapen

  3. mongorestore van standalone naar replicaset

  4. Hoe TTL-formulier MongoDB-verzameling te verwijderen?