वैसे यह अच्छा होगा यदि आप स्थान का प्रतिनिधित्व करने के लिए जियोसन ऑब्जेक्ट का उपयोग कर सकते हैं लेकिन वर्तमान में समर्थित प्रकार वास्तव में सीमित हैं इसलिए एक "सर्कल" प्रकार जो आदर्श होगा, समर्थित नहीं है।
आप जो निकटतम कर सकते हैं वह एक "बहुभुज" है जो एक सर्कल का अनुमान लगाता है, लेकिन शायद इस क्वेरी उद्देश्य के लिए निर्माण करने के लिए शायद यह थोड़ा अधिक काम है। ऐसा करने के साथ दूसरा गोचा और फिर $geoIntersects
यह है कि परिणाम क्वेरी बिंदु से दूरी के अनुसार "क्रमबद्ध" नहीं होंगे। ऐसा लगता है कि यह "निकटतम पिज़्ज़ा" को मूल स्थान तक खोजने के उद्देश्य के विपरीत है।
सौभाग्य से एक $geoNear
है
संचालन को MongoDB 2.4 और इससे अधिक के रूप में एकत्रीकरण ढांचे में जोड़ा गया। यहां अच्छी बात यह है कि यह परिणामों में एक दूरी के क्षेत्र के "प्रक्षेपण" की अनुमति देता है। यह तब आपको सर्वर पर उन बिंदुओं पर तार्किक फ़िल्टरिंग करने की अनुमति देता है जो मूल के बिंदु से दूरी के लिए "त्रिज्या के भीतर" बाधा हैं। यह सर्वर पर छँटाई की भी अनुमति देता है।
लेकिन आपको अभी भी अनुक्रमणिका का समर्थन करने के लिए अपनी स्कीमा बदलने की आवश्यकता होगी
db.places.insert({
"name": "Pizza Hut",
"location": {
"type": "Point",
"coordinates": [
151.00211262702942,
-33.81696995135973
]
},
"radius": 20
})
db.places.ensureIndex({ "location": "2dsphere" })
और एकत्रीकरण क्वेरी के लिए:
db.places.aggregate([
// Query and project distance
{ "$geoNear": {
"near": {
"type": "Point",
"coordinates": [
150.92094898223877,
-33.77654333272719
]
},
"distanceField": "distance",
"distanceMultiplier": 0.001,
"maxDistance": 100000,
"spherical": true
}},
// Calculate if distance is within delivery sphere
{ "$project": {
"name": 1,
"location": 1,
"radius": 1,
"distance": 1,
"within": { "$gt": [ "$radius", "$distance" ] }
}},
// Filter any false results
{ "$match": { "within": true } },
// Sort by shortest distance from origin
{ "$sort": { "distance": -1 } }
])
मूल रूप से यह कहता है,
ऐसे अन्य विकल्प हैं जिन्हें आप $geoNear
परिणाम को परिशोधित करने के लिए, साथ ही यदि आवश्यक हो तो डिफ़ॉल्ट 100 से अधिक परिणाम लौटाएं और मूल रूप से "प्रकार" या "नाम" या दस्तावेज़ पर आपके पास जो भी अन्य जानकारी है, जैसे अन्य विकल्पों को क्वेरी करने के लिए पास करें।