MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongoose извиква geoNear с GeoJSON точки като параметри на заявката, които не работят

Проблемът беше неправилното използване на maxDistance. Следният израз работи.


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

Сега заявката правилно открива, че двата документа в колекцията не са в рамките на 1 метър от заявеното местоположение. Запитването за местоположение по-близо до дома също ни дава очакваните резултати.


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

Решението?

В документацията на MongoDb за geoNear се посочва, че ако се използва обект geoJSON, maxDistance трябва да бъде в метри и в радиани, ако се използват координатни двойки.

Това или е погрешно, или моето разбиране за това е погрешно.

Както можете да видите по-горе, вместо да посочите 1 метър за maxDistance, той се доставя в радиани.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb:db.collection.copyTo() и eval() са отхвърлени. Какви са алтернативите?

  2. Сортирайте масива в документа с MongoDB

  3. Сериализиране към обект с помощта на scala mongo драйвер?

  4. Моля, използвайте „MongoMappingContext#setAutoIndexCreation(boolean)“ или заменете „MongoConfigurationSupport#autoIndexCreation()“, за да бъде изрично

  5. Как да настроя MongoDB драйвер на XAMPP