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

MongoDB में एक दायरे के भीतर क्वेरी स्थान

यह तीन चरणों वाली प्रक्रिया है।

  • चरण 1) अपने दस्तावेज़ों में जियोसन पॉइंट एम्बेड करें।
  • चरण 2) 2dsphere . का उपयोग करके बिंदुओं के पथ को अनुक्रमित करें ।
  • चरण 3) $geoWithin . का उपयोग करके दस्तावेज़ों में बिंदुओं के बारे में पूछें और $centerSphere

भू-स्थानिक प्रश्नों को करने के लिए, आपको GeoJSON से मिलान करने के लिए दस्तावेज़ संरचना को बदलने की आवश्यकता है प्वाइंट। जो इस तरह दिखता है।

loc : {
    type : "Point",
    coordinates : [lng, lat]
}

अपने संग्रह को बिंदु प्रारूप में अनुवाद करने के लिए नमूना कोड।

// sample setup code.
// use test; 
// db.positions.drop();
// db.positions.insert({
    // pos : {
        // lat : 0,
        // lon : 30
    // }
// });
db.positions.find().forEach(function (doc) {
    var point = {
        _id : doc._id,
        loc : {
            type : "Point",
            coordinates : [doc.pos.lon, doc.pos.lat]
        }
    };
    db.positions.update(doc, point);
});
db.positions.find().pretty();

बाद में, आप $geoWithin . का उपयोग कर सकते हैं और $near आपके प्रश्नों में ऑपरेटर नीचे दिए गए उदाहरण की तरह हैं।

उदाहरण

सेटअप

var createLandmarkDoc = function (name, lng, lat) {
    return {
        name : name,
        loc : {
            type : "Point",
            coordinates : [lng, lat]
        }
    };
};
var addNewLandmark = function(name, lng, lat){
    db.landmarks.insert(createLandmarkDoc(name, lng, lat));
};

db.landmarks.drop();
// Step 1: Add points.
addNewLandmark("Washington DC", 38.8993487, -77.0145665);
addNewLandmark("White House", 38.9024593, -77.0388266);
addNewLandmark("Library of Congress", 38.888684, -77.0047189);
addNewLandmark("Patuxent Research Refuge", 39.0391718, -76.8216182);
addNewLandmark("The Pentagon", 38.871857, -77.056267);
addNewLandmark("Massachusetts Institute of Technology", 42.360091, -71.09416);

// Step 2: Create index
db.landmarks.ensureIndex({
    loc : "2dsphere"
});

क्वेरी:5 मील के भीतर लैंडमार्क ढूंढें।

var milesToRadian = function(miles){
    var earthRadiusInMiles = 3959;
    return miles / earthRadiusInMiles;
};
var landmark = db.landmarks.findOne({name: "Washington DC"});
var query = {
    "loc" : {
        $geoWithin : {
            $centerSphere : [landmark.loc.coordinates, milesToRadian(5) ]
        }
    }
};
// Step 3: Query points.
db.landmarks.find(query).pretty();

आउटपुट

{
        "_id" : ObjectId("540e70c96033ed0d2d9694fa"),
        "name" : "Washington DC",
        "loc" : {
                "type" : "Point",
                "coordinates" : [
                        38.8993487,
                        -77.0145665
                ]
        }
}
{
        "_id" : ObjectId("540e70c96033ed0d2d9694fc"),
        "name" : "Library of Congress",
        "loc" : {
                "type" : "Point",
                "coordinates" : [
                        38.888684,
                        -77.0047189
                ]
        }
}
{
        "_id" : ObjectId("540e70c96033ed0d2d9694fb"),
        "name" : "White House",
        "loc" : {
                "type" : "Point",
                "coordinates" : [
                        38.9024593,
                        -77.0388266
                ]
        }
}
{
        "_id" : ObjectId("540e70c96033ed0d2d9694fe"),
        "name" : "The Pentagon",
        "loc" : {
                "type" : "Point",
                "coordinates" : [
                        38.871857,
                        -77.056267
                ]
        }
}

अधिक जानकारी:



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. क्या मोंगो-कनेक्टर इलास्टिक्स खोज में डालने से पहले फ़ील्ड जोड़ने का समर्थन करता है?

  2. नोएसक्यूएल - मोंगोडीबी बनाम कॉच डीबी

  3. नेवला स्कीमा में सरणियों को सहेजें

  4. दस्तावेज़ों में उप-सरणी से उच्चतम मूल्य ढूँढना

  5. MongoDB में पहलू का उपयोग करके प्रतिशत की गणना कैसे करें?