2010-12-31 14 views
6

डॉक्स में, यह कहना है कि डिफ़ॉल्ट रूप से, मोंगो अक्षांश/देशांतर के रूप में यह मान लेता है:मैं मोंगो में भूगर्भीय क्वेरी कैसे चला सकता हूं?

डिफ़ॉल्ट रूप से, सूचकांक मानता है कि आपके अनुक्रमण अक्षांश/देशांतर कर रहे हैं और इस प्रकार के लिए एक [-180 कॉन्फ़िगर किया गया है। .180] मूल्य सीमा।

तो, चलो कहते हैं कि मैं अपने दस्तावेज़ में इस डालते हैं:

db.mycollection.ensureIndex({"loc":"2d"}) 

अब, मैं कैसे मोंगो में निम्नलिखित को निष्पादित करते हैं:

post['loc'] = [ -40.234, 56.222] 
db.mycollection.save(post) 

मैं अपने सूचकांक सुनिश्चित?

  • मुझे सभी दस्तावेजों की 5 मील की दूरी के भीतर कर रहे दें एक निश्चित अक्षांश/देशांतर
  • मुझे $maxDistance के साथ conjuction में एक निश्चित अक्षांश/देशांतर

उत्तर

6

उपयोग $near के 400 मीटर के भीतर सभी दस्तावेजों दें:

db.mycollection.find({loc: {$near: [50, 50], $maxDistance: 5}}) 

$maxDistance की इकाई loc क्षेत्र, यानी डिग्री के समान है। यदि मुझे सही याद है तो एक डिग्री भूमध्य रेखा पर लगभग 69 मील या 111 किमी है (लेकिन यह अन्य अक्षांशों में कम है, सटीक दूरी की गणना करना मुश्किल है)।

लौटे स्थानों के बारे में अधिक जानकारी प्राप्त करने के लिए, आप geoNear कमांड का उपयोग कर सकते हैं, जो आपको अन्य चीजों के साथ सभी लौटे हुए संग्रहों की दूरी बताएगा। http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-geoNearCommand

देखें मुझे लगता है कि आप भी $geoWithin का उपयोग अपनी समस्या को हल करने के लिए कर सकते हैं:

db.mycollection.find({loc: {$geoWithin: {$center: [[50, 50], 5/3959]}}}) 

यह 5/3959 डिग्री के दायरे चक्र (50, 50) पर केन्द्रित के सभी स्थानों खोजना चाहिए (यानी 5 मील)।

+0

आप सबसे अच्छे हैं! – Ali

संबंधित मुद्दे