Masalahnya salah menggunakan maxDistance. Ekspresi berikut berhasil.
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 }
[]
Sekarang kueri dengan benar menemukan bahwa dua dokumen dalam koleksi tidak berada dalam jarak 1 meter dari lokasi yang ditanyakan. Menanyakan lokasi yang lebih dekat dengan rumah juga memberi kami hasil yang diharapkan.
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 } } ]
Solusinya?
Dokumentasi MongoDb dari geoNear menyatakan bahwa jika menggunakan objek geoJSON, maxDistance harus dalam meter, dan dalam radian jika menggunakan pasangan koordinat.
Ini salah, atau pemahaman saya salah.
Seperti yang Anda lihat di atas, daripada menentukan 1 meter untuk maxDistance, ini diberikan dalam Radian.