2011-05-02 11 views
14

मैं अपने मोंगोडीबी तक पहुंचने के लिए नोड.जेएस और मोंगोस का उपयोग कर रहा हूं। मैं एक मॉडल का उपयोग कर रहा हूं जो कुछ भू समन्वय संग्रहीत करता है। मैंने उन्हें अनुक्रमित किया है और सबकुछ अपेक्षित काम करता है। मैं जो करने की कोशिश कर रहा हूं वह है कि मेरे अनुरोध से सबसे नज़दीकी चीजें पुनर्प्राप्त करें। मोंगोडीबी कंसोल पर मैं ऐसा कुछ करता हूं:Mongoose के साथ runCommand निष्पादित करने के लिए कैसे?

distances = db.runCommand({ geoNear : "deals", near : [11.252, 14.141], spherical : true, maxDistance : 300 }).results 

हालांकि, मुझे यकीन नहीं है कि यह मोंगोस के साथ कैसे करें। http://www.mongodb.org/display/DOCS/Geospatial+Indexing

धन्यवाद, जोस

उत्तर

0

मुझे नहीं लगता कि नेवला अभी समर्थन करता है runCommand: यहाँ आदेश मैं उपयोग करने के लिए कोशिश कर रहा हूँ के बारे में अधिक जानकारी है। आप find विधि का उपयोग कर भू-स्थानिक विकल्पों का उपयोग करना बेहतर होगा। >

db.places.find({ location : { $near : [50,50] , $maxDistance : 300 } }) 
+1

लेकिन यह मुझे दूरी जो मैं करना चाहते हैं वापस नहीं करता है! कोई विचार? – jsimoes

+0

क्या आप हमें अपना कोड दिखा सकते हैं? – neebz

1
YourModel.db.db.executeDbCommand({geoNear : "locations", near : [11.252,14.141], spherical: true }, function(err,res) { console.log(res.documents[0].results)}); 

नोड 0.6.6, [email protected], MongoDB संस्करण v2.0.2

इसकी एक सा hacky और बदल सकता है।

+0

यह अब 3.6x में काम नहीं करता है। एपीआई दस्तावेज़ों के माध्यम से देखकर, मुझे तुलनीय कुछ भी दिखाई नहीं देता है। क्या आप इसे पूरा करने के लिए एक और तरीका जानते हैं? – occasl

+1

YourModel.db.db.command ({geoNear: "locations", पास: [11.252,14.141], गोलाकार: सत्य}, फ़ंक्शन (त्रुटि, res) {console.log (res.documents [0] .results)}); – Carasel

5

सबसे पहले अभी तक मोंगोस के साथ भू-नायर का उपयोग करने के लिए एक सुविधा रैपर नहीं है (यह देखते हुए कि आप गणना की दूरी को पढ़ना चाहते हैं)।

लेकिन चूंकि देशी MongoDB native driver से नेवला संग्रह proxies all collection methods आप सिर्फ अपने geoNear method उपयोग कर सकते हैं, हालांकि आप आप नेवला से और मेरे निष्कर्ष में त्रुटि हैंडलिंग थोड़ा अलग था उम्मीद कर सकते हैं सुविधा का एक छोटा सा देने के लिए किया है।

वैसे भी, यह है आप कैसे इस्तेमाल कर सकते हैं है कहा एपीआई:

YourModel.collection.geoNear(lon, lat, {spherical: true, maxDistance: d}, function(err, docs) { 
    if (docs.results.length == 1) { 
    var distance = docs.results[0].dis; 
    var match = docs.results[0].obj; 
    } 
}); 

कृपया सही त्रुटि हैंडलिंग और how to calculate the distances के लिए दस्तावेज़ देखें।

0

आशा है कि यह काम करना चाहिए !! संदर्भ के यूआरएल: http://mongoosejs.com/docs/api.html

// विरासत बिंदु

Model.geoNear([1,3], { maxDistance : 5, spherical : true }, function(err, results, stats) { 
    console.log(results); 
}); 

// GeoJSON

var point = { type : "Point", coordinates : [9,9] }; 
Model.geoNear(point, { maxDistance : 5, spherical : true }, function(err, results, stats) { 
    console.log(results); 
}); 
संबंधित मुद्दे