MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

उन सभी मंडलियों को कैसे प्राप्त करें जिनमें एक बिंदु निहित है?

MongoDB के $geoIntersects . का उपयोग करना संभव है भू-स्थानिक क्वेरी ऑपरेटर।

इसलिए, यदि आपके पास जियोसन बहुभुजों का संग्रह है और आप उन सभी बहुभुजों का पता लगाना चाहते हैं जो आपके दिए गए बिंदु से प्रतिच्छेद करते हैं, तो आपको निम्नलिखित को चलाने की आवश्यकता है:

db.places.find( { <locationFieldOfYourDocuments> :
                  { $geoIntersects :
                    { $geometry :
                      { type : "Point" ,
                        coordinates: [long, lat]
                } } } } )

ऊपर दिए गए कमांड में, loc प्रत्येक दस्तावेज़ की वह विशेषता है जिसमें GeoJson बहुभुज के निर्देशांक होते हैं। साथ ही, सुनिश्चित करें कि आपके पास 2dsphere है <locationFieldOfYourDocuments> . पर अनुक्रमणिका ।

अब, आपकी मूल समस्या को हल करने के लिए मैं थोड़ी सी जावास्क्रिप्ट का उपयोग करूंगा। बेहतर समाधान हो सकते हैं लेकिन मेरी जानकारी में नहीं।

मान लें कि आपकी सभी मंडलियां Circles . में संगृहीत हैं संग्रह। मैं उस संग्रह को क्वेरी करता हूं और प्रत्येक सर्कल को एक-एक करके लाता हूं और फिर दूसरे संग्रह के साथ एक इंटरसेक्ट करता हूं जिसमें एक बिंदु होता है जिसे आप पूछना चाहते हैं कि यह सर्कल के साथ छेड़छाड़ करता है या नहीं। तो पॉइंट को SinglePoint में स्टोर होने दें संग्रह।

स्क्रिप्ट इस तरह दिखेगी...

db.Intersections.remove({}); // emptying the output collection
var circleCursor = db.Circles.find();
while (circleCursor.hasNext()) {
    var circle = circleCursor.next();
    var coord = circle.location;
    var radiusInRadians = circle.radius * conversionFactorForRadius;
    var intersect = db.SinglePoint.find({loc :
                                         { $geoWithin :
                                           {$centerSphere : [coord], radiusInRadians}
                                         }});
    if (intersect.hasNext()) {db.Intersections.add(circle)} // this will add all intersecting circles to Intersections collection
}

आपको बस इस स्क्रिप्ट को एक फाइल (myScript.js) में सेव करना है और कॉल करना है:

mongo DBName pathTomyScript.js

यह उन सभी मंडलियों को संग्रहीत करेगा जो आपके इनपुट बिंदु के साथ प्रतिच्छेद संग्रह में प्रतिच्छेद करते हैं। उपरोक्त सभी संग्रह DBName डेटाबेस में होने चाहिए।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नेवला, एक्सप्रेस, NodeJS के साथ अद्यतन मॉडल

  2. mongodb - नेस्टेड उप-दस्तावेज़ों को खोलना;

  3. कॉन्फ़िगरेशन त्रुटि:127.0.0.1:27017 पर सर्वर वायर संस्करण 0 की रिपोर्ट करता है, लेकिन PyMongo के इस संस्करण में कम से कम 2 (MongoDB 2.6) की आवश्यकता होती है।

  4. MongoDB में _id कैसे निकालें और प्राथमिक कुंजी के रूप में किसी अन्य फ़ील्ड से बदलें?

  5. MapReduce समस्या