समस्या गलत तरीके से 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 प्रलेखन में कहा गया है कि यदि जियोसन ऑब्जेक्ट का उपयोग करना है तो मैक्सडिस्टेंस मीटर में होना चाहिए, और रेडियन में समन्वय जोड़े का उपयोग करना चाहिए।
यह या तो गलत है, या इसके बारे में मेरी समझ गलत है।
जैसा कि आप ऊपर देख सकते हैं, मैक्सडिस्टेंस के लिए 1 मीटर निर्दिष्ट करने के बजाय, इसकी आपूर्ति रेडियन में की जाती है।