MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Mongoose gọi đến geoNear với các điểm GeoJSON khi các tham số truy vấn không hoạt động

Sự cố do sử dụng maxDistance không chính xác. Biểu thức sau đã hoạt động.


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

Bây giờ truy vấn phát hiện chính xác rằng hai tài liệu trong bộ sưu tập không nằm trong phạm vi 1 mét từ vị trí được truy vấn. Truy vấn một vị trí gần nhà hơn cũng mang lại cho chúng tôi kết quả như mong đợi.


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

Giải pháp?

Tài liệu MongoDb của geoNear nói rằng nếu sử dụng đối tượng geoJSON, maxDistance phải tính bằng mét và tính bằng radian nếu sử dụng cặp tọa độ.

Điều này sai hoặc sự hiểu biết của tôi về nó sai.

Như bạn có thể thấy ở trên, thay vì chỉ định 1 mét cho maxDistance, nó được cung cấp bằng Radian.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách xóa các giá trị trùng lặp bên trong danh sách trong mongodb

  2. $ pull nhiều đối tượng trong Mongo không hoạt động

  3. MongoDB $ pow

  4. Mongoose:Bộ sưu tập không điền khi được sử dụng làm tài liệu giới thiệu trong tài liệu khác

  5. Không thể khởi tạo giản đồ mongoose:Đối tượng không phải là một hàm