2015-11-23 10 views
5

जब मैं मोंगोडीबी पर इस प्रश्न को फायर कर रहा हूं, तो मुझे निर्दिष्ट समन्वय में 500 मील की निकटता में सभी जगहें मिल रही हैं। लेकिन मैं निर्दिष्ट समन्वय और परिणाम स्थान के बीच सटीक दूरी जानना चाहता हूं।दो बिंदुओं के बीच मोंगोडीबी प्रिंट दूरी

db.new_stores.find({ "geometry": { $nearSphere: { $geometry: { type: "Point", coordinates: [ -81.093699, 32.074673 ] }, $maxDistance: 500 * 3963 } } }).pretty() 

मेरे आउटपुट लगता है:

{ 
    "_id" : ObjectId("565172058bc200b0db0f75b1"), 
    "type" : "Feature", 
    "geometry" : { 
     "type" : "Point", 
     "coordinates" : [ 
      -80.148826, 
      25.941116 
     ] 
    }, 
    "properties" : { 
     "Name" : "Anthony's Coal Fired Pizza", 
     "Address" : "17901 Biscayne Blvd, Aventura, FL" 
    } 
} 

मैं भी निर्दिष्ट समन्वय से इस जगह की दूरी जानना चाहते हैं। मैंने ज्यामिति पर 2dsphere अनुक्रमणिका बनाई।

उत्तर

9

आप $geoNear कुल पाइपलाइन मंच का उपयोग पूछे बिंदु से एक दूरी का उत्पादन करने के कर सकते हैं: आप "distanceField" जहाँ से दूरी युक्त उत्पादन दस्तावेजों में एक और क्षेत्र का उत्पादन करेगा निर्दिष्ट करने के लिए

db.new_stores.aggregate([ 
    { "$geoNear": { 
     "near": { 
      "type": "Point", 
      "coordinates": [ -81.093699, 32.074673 ] 
     }, 
     "maxDistance": 500 * 1609, 
     "spherical": true, 
     "distanceField": "distance", 
     "distanceMultiplier": 0.000621371 
    }} 
]).pretty() 

यह अनुमति देता है पूछे गए बिंदु। तुम भी "distanceMultiplier" इसका इस्तेमाल उत्पादन दूरी के रूपांतरण applyany कर सकते हैं की आवश्यकता है (मील यानी मीटर, और यह देखते हुए कि सभी GeoJSON दूरी मीटर में लौटा दिया जाता है)

वहाँ भी समान विकल्पों के साथ geoNear आदेश है के रूप में है, लेकिन निश्चित रूप से करता है एक कर्सर आउटपुट के रूप में वापस नहीं।

+0

बहुत बहुत धन्यवाद, यह पूरी तरह से काम कर रहा है। जानना उत्सुक है कि आपने 160 9 तक इसे क्यों गुणा किया? – SiMemon

+1

@SiMemon क्योंकि एक मील में 160 9 मीटर हैं, और दूरी Multiplier पर उपाध्यक्ष/विपरीत। आप जिस 3 9 63 नंबर का उपयोग कर रहे थे वह "रेडियंस" का मील तक रूपांतरण है, जो जियोज़सन पॉइंट निर्देशांक के साथ उपयोग किए जाने पर गलत होगा। रेडियंस का उपयोग केवल भंडारण और क्वेरी दोनों के साथ किया जाता है "विरासत समन्वय जोड़े" का उपयोग कर रहे हैं। –

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