मोंगो शैल में एक चौराहे या ओवरलैप क्वेरी कैसे करें - कौन से मंडल मेरे खोज क्षेत्र को ओवरलैप करते हैं? Within
केवल केंद्र की स्थिति से संबंधित है लेकिन खोज के दायरे में अन्य मंडलियों के त्रिज्या शामिल नहीं है।केंद्रीय सर्कल के त्रिज्या से सभी ओवरलैपिंग सर्कल कैसे ढूंढें?
मोंगो:
रूबी:
# field :circle, type: Circle # eg. [ [ 30, 30 ], 10 ]
field :radius, type: Integer
field :location, :type => Array, :spatial => true
spatial_index :location
Places.within_circle(location: [ [ 30, 30 ], 10 ])
# {"$query"=>{"location"=>{"$within"=>{"$center"=>[[30, 30], 10]}}}
मैं अतिरिक्त स्थान के साथ उदाहरण डेटा बनाया
# My bad conception:
var search = [[30, 30], 10]
db.places.find({circle : {"$within" : {"$center" : [search]}}})
अब मैं केंद्रीय बिंदु के भीतर ही इस हलकों प्राप्त कर सकते हैं चक्र के खोजा क्षेत्र में है (विशेष इंडेक्स) और इसके बजाय त्रिज्या सर्कल क्योंकि मंडल mongodb geo अनुक्रमणिका द्वारा समर्थित नहीं है:
{ "_id" : 1, "name" : "a", "circle" : [ [ 5, 5 ], 40 ], "latlng" : [ 5, 5 ], "radius" : 40 }
{ "_id" : 2, "name" : "b", "circle" : [ [ 10, 10 ], 5 ], "latlng" : [ 10, 10 ], "radius" : 5 }
{ "_id" : 3, "name" : "c", "circle" : [ [ 20, 20 ], 5 ], "latlng" : [ 20, 20 ], "radius" : 5 }
{ "_id" : 4, "name" : "d", "circle" : [ [ 30, 30 ], 50 ], "latlng" : [ 30, 30 ], "radius" : 50}
{ "_id" : 5, "name" : "e", "circle" : [ [ 80, 80 ], 30 ], "latlng" : [ 80, 80 ], "radius" : 30}
{ "_id" : 6, "name" : "f", "circle" : [ [ 80, 80 ], 20 ], "latlng" : [ 80, 80 ], "radius" : 20}
वांछित क्वेरी परिणाम:
{ "_id" : 1, "name" : "a", "circle" : [ [ 5, 5 ], 40 ], "latlng" : [ 5, 5 ], "radius" : 40 }
{ "_id" : 3, "name" : "c", "circle" : [ [ 20, 20 ], 5 ], "latlng" : [ 20, 20 ], "radius" : 5 }
{ "_id" : 4, "name" : "d", "circle" : [ [ 30, 30 ], 50 ], "latlng" : [ 30, 30 ], "radius" : 50}
{ "_id" : 5, "name" : "e", "circle" : [ [ 80, 80 ], 30 ], "latlng" : [ 80, 80 ], "radius" : 30}
नीचे समाधान मानता है कि मैं सभी पंक्तियां प्राप्त और फिर मेरी त्रिज्या पक्ष माणिक पर फ़िल्टर लेकिन यह केवल रिटर्न:
{ "_id" : 4, "name" : "d", "circle" : [ [ 30, 30 ], 50 ], "latlng" : [ 30, 30 ], "radius" : 50}
मुझे लगता है कि आप वापस चाहते हैं "एक"
यहाँ एक काम के आसपास खोल में है कि गणना के आधार पर है , "सी और डी"। "ई" आपके सर्कल से ओवरलैप नहीं होता है। –
मैं पहली बार जवाब देने पर अपना कोड नहीं देख सका। इसे जांच लिया और इसे अभी तय कर दिया। आप स्वयं देख सकते हैं। जैसा कि अस्या कामस्की ने कहा, आप केवल एक, सी और डी की उम्मीद करते हैं। अन्यथा जो जानकारी आपने हमें दी है वह गलत है। – oldergod
असल में मैंने "ई" पर गलती की। दोनों समाधान अच्छे हैं, लेकिन अब मैं देखता हूं कि वर्तमान समय के लिए रूबी का उपयोग किया जाएगा। मुझे डर है कि रिकॉर्ड के बड़े आकार पर मेरा प्रोग्राम बहुत तेज़ काम नहीं कर सकता है, इसलिए मैंने मोंगो में दृष्टिकोण के बारे में भी पूछा। धन्यवाद! – roza