जब तक आपका MongoDB सर्वर हाल ही में पर्याप्त है, 2.6 या उससे अधिक का संस्करण होने के कारण यह कार्यक्षमता वास्तव में सामान्य क्वेरी इंजन में ले जाया गया है। नेवला विधि यहाँ .runCommand()
. को लपेटती है फ़ॉर्म जिसे सभी भावी रिलीज़ के लिए बहिष्कृत माना जाता है, इसलिए यह अतिरिक्त ऑपरेटरों के साथ एक मानक क्वेरी रखने की बात है।
GeoLocation.find({
"$nearSphere": {
"$geometry": {
"type": "Point",
"coordinates": [parseFloat(req.params.lng), parseFloat(req.params.lat)]
},
"$maxDistance": distanceInMeters
},
"loc.type": "Point"
},function(err,docs) {
// The documents are also mongoose document objects as well
});
$nearSphere
पर और विकल्प देखें
या विकल्पों के लिए अन्य ऑपरेटरों। यहाँ मुख्य अंतर है $maxDistance
जब जियोसन फॉर्म का उपयोग किया जाता है, तो रेडियन के बजाय मीटर में होता है।
निश्चित रूप से $geoNear
एकत्रीकरण पाइपलाइन के लिए ऑपरेटर। यह MongoDB 2.4 के रूप में उपलब्ध है और परिणामों को और कम करने के लिए "क्वेरी" जैसे अन्य विकल्प ले सकता है। यहां अन्य संभावित लाभ यह है कि यह क्वेरी बिंदु से "दूरी" का प्रतिनिधित्व करने वाले आपके परिणामों में एक फ़ील्ड "प्रोजेक्ट" करेगा। इसका उपयोग अन्य गणनाओं या कस्टम सॉर्टिंग में किया जा सकता है:
GeoLocation.aggregate(
[
{ "$geoNear": {
"near": {
"type": "Point",
"coordinates": [parseFloat(req.params.lng), parseFloat(req.params.lat)]
},
"distanceField": "distance",
"maxDistance": distanceInMeters,
"spherical": true,
"query": { "loc.type": "Point" }
}},
{ "$sort": { "distance": -1 } } // Sort nearest first
],
function(err,docs) {
// These are not mongoose documents, but you can always cast them
}
);
ध्यान देने योग्य अन्य अंतर यह है कि मानक क्वेरी फॉर्म में परिणाम अब 100 दस्तावेजों तक सीमित नहीं हैं क्योंकि वे "कमांड" फॉर्म में हैं। एकत्रीकरण $geoNear
डिफ़ॉल्ट रूप से परिणाम के रूप में 100 दस्तावेज़ों की सीमा होती है, लेकिन लौटाए गए दस्तावेज़ों की संख्या को पाइपलाइन कमांड के अतिरिक्त "सीमा" विकल्प के साथ ट्यून किया जा सकता है। समग्र विवरण खोज से लौटने के लिए अधिकतम दस्तावेज़ों के अलावा अन्य परिणामों को "क्रमबद्ध" नहीं करता है, शर्तों को देखते हुए शीर्ष परिणाम हैं, लेकिन उन्हें क्रम में वापस नहीं किया जाता है, इसलिए आपको उन्हें दिखाए गए अनुसार क्रमबद्ध करना होगा।
किसी भी मामले में आपको इन रूपों में से किसी एक का उपयोग करने के लिए अपना कोड स्थानांतरित करना चाहिए क्योंकि कमांड फॉर्म को बहिष्कृत माना जाता है और भविष्य में हटा दिया जाएगा। क्या नेवला एपीआई इन रूपों में से किसी एक के लिए "रैपर" के रूप में अपनी विधि को बरकरार रखता है, अज्ञात है, लेकिन अधिकतर संभावना नहीं है, इसलिए समर्थित रूपों के साथ रहना बेहतर है।