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

नेवले में जियोलोकेशन बनाएं और खोजें

यदि आप GeoJSON का समर्थन करने के लिए एक स्कीमा चाहते हैं, तो आपको सबसे पहले इसे ठीक से बनाने की आवश्यकता है:

var userSchema = new Schema({
    loc: {
        type: { type: String },
        coordinates: [Number],
    }
});

यह सुनिश्चित करता है कि स्कीमा परिभाषा के "प्रकार" कीवर्ड के साथ कोई भ्रम नहीं है। यदि आप वास्तव में GeoJSON प्रकारों की पूरी श्रृंखला का समर्थन करना चाहते हैं, तो आप इसे थोड़ा ढीला कर सकते हैं:

var userSchema = new Schema({
    loc: {
        type: { type: String },
        coordinates: []
    }
});

आगे आप एक अनुक्रमणिका को शेमा से जोड़ना चाहते हैं:

userSchema.index({ "loc": "2dsphere" });

फिर निश्चित रूप से एक मॉडल को परिभाषित करें और चीजों को सही तरीके से स्टोर करें:

var User = mongoose.model( "User", userSchema );

 var user = new User({ 
     "loc": { 
         "type": "Point",
         "coordinates": [-73.97, 40.77]
     }
 });

ध्यान दें कि आपका डेटा देशांतर . में होना चाहिए फिर अक्षांश GeoJSON और सभी MongoDB भू-स्थानिक क्वेरी फ़ॉर्म द्वारा समर्थित आदेश के अनुसार।

अगला, कच्चे ड्राइवर विधि पर सीधे डेटाबेस कमांड के अस्पष्ट उपयोगों में खुदाई करने के बजाय, उन चीजों का उपयोग करें जो सीधे समर्थित हैं, और बेहतर। जैसे $geoNear .aggregate() . के लिए विधि:

User.aggregate(
    [
        { "$geoNear": {
            "near": {
                "type": "Point",
                "coordinates": [<long>,<lat>]
            },
            "distanceField": "distance",
            "spherical": true,
            "maxDistance": 10000
        }}
    ],
    function(err,results) {

    }
)

और अब क्योंकि डेटा जियोसन है, दूरियों को पहले ही मीटर में बदल दिया गया है, इसलिए अन्य रूपांतरण कार्य करने की कोई आवश्यकता नहीं है।

यह भी ध्यान दें कि क्या आप इसके साथ खिलवाड़ कर रहे हैं, जब तक कि आप संग्रह को नहीं छोड़ते हैं, तब भी आपके द्वारा आजमाया गया कोई भी सूचकांक वहाँ रहेगा और इससे समस्याएँ हो सकती हैं।

आप संग्रह से सभी इंडेक्स को मोंगोडब शेल में आसानी से छोड़ सकते हैं:

db.users.dropIndexes();

या चूंकि आपको शायद कुछ डेटा री-शेपिंग करने की ज़रूरत है, फिर संग्रह छोड़ दें और फिर से शुरू करें:

db.users.drop();

चीजों को ठीक से सेट करें और आपको कोई समस्या नहीं होगी।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मैं mongoDB में चित्र कैसे जोड़ सकता हूँ?

  2. RedHat/CentOS 7 सिस्टम पर MongoDB 4.2 कैसे स्थापित करें

  3. Node.js/Express और Mongoose का उपयोग करके MongoDB में एक छवि संग्रहीत करें

  4. MongoDb PHP के साथ क्वेरी में शामिल हों

  5. MongoConnectionException - कोई उम्मीदवार सर्वर नहीं मिला