sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose anropar till geoNear med GeoJSON-punkter eftersom frågeparametrar inte fungerar

Problemet användes felaktigt av maxDistance. Följande uttryck fungerade.


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 upptäcker frågan korrekt att de två dokumenten i samlingen inte ligger inom 1 meter från den efterfrågade platsen. Att fråga efter en plats närmare hemmet ger oss också de förväntade 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 } } ]

Lösningen?

MongoDb-dokumentation av geoNear säger att om man använder ett geoJSON-objekt ska maxDistance vara i meter, och i radianer om man använder koordinatpar.

Antingen är det fel eller så är min uppfattning om det fel.

Som du kan se ovan, snarare än att ange 1 meter för maxDistance, levereras den i radianer.



  1. Mongodb C#-drivrutin Ostödd filterfel med specifikt linq-predikat

  2. Mongo:fråga med nyckel en nivå djup

  3. Elem match returnerar all data medan jag bara behöver den valda datan

  4. gruppinsamlingsdata efter flera fält mongodb