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.