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

भू-नियर के साथ नेवला एकत्रीकरण

आप इसके लिए एकत्रीकरण ढांचे का उपयोग कर सकते हैं और कोई वास्तविक दंड नहीं है क्योंकि संचालन अनिवार्य रूप से समान हैं।

लेकिन नेवले .find() विधि में वर्तमान में $nearSphere<के साथ समस्या है /कोड> ऑपरेटर जो समकक्ष है, आप हमेशा कच्चे नोड ड्राइवर कनेक्शन ऑब्जेक्ट को पकड़ सकते हैं और अपनी क्वेरी कर सकते हैं।

अगर आप थोड़ी सी हैंडलिंग को लागू करने के लिए तैयार हैं तो आपको "जनसंख्या" जैसी चीजों को फेंकने की भी जरूरत नहीं है।

यह रहा मेरा परीक्षण डेटा:

{ 
    "_id" : "P1",
    "amenity" : "restaurant", 
    "shape" : { 
        "type" : "Point", 
        "coordinates" : [ 2, 2 ] 
    }
}
{ 
    "_id" : "P3",
    "amenity" : "police",
    "shape" : { 
        "type" : "Point", 
        "coordinates" : [ 4, 2 ]
    }
}
{ 
    "_id" : "P4",
    "amenity" : "police",
    "shape" : {
        "type" : "Point",
        "coordinates" : [ 4, 4 ]
    }
}
{ 
    "_id" : "P2",
    "amenity" : "restaurant",
    "shape" : { 
        "type" : "Point",
        "coordinates" : [ 2, 4 ]
    }, 
    "info" : ObjectId("539b90543249ff8d18e863fb")
}

और इसे संभालने के लिए मूल कोड:

var mongoose = require('mongoose'),
    async = require('async'),
    Schema = mongoose.Schema;


mongoose.connect('mongodb://localhost');

var infoSchema = new Schema({
  "description": String
});

var shapeSchema = new Schema({
  "_id": String,
  "amenity": String,
  "shape": {
    "type": { "type": String },
    "coordinates": []
  },
  "info": { "type": Schema.Types.ObjectId, "ref": "Info" }
});

var Shape = mongoose.model( "Shape", shapeSchema );
var Info = mongoose.model( "Info", infoSchema );


Shape.collection.find(
  {
    "shape": {
      "$nearSphere": {
        "$geometry": {
          "type": "Point",
          "coordinates": [ 2, 4 ]
        }
      }
    }
  },
  {
    "skip": 0, "limit": 2
  },
  function(err,cursor) {

    cursor.toArray(function(err,shapes) {

      Shape.populate( shapes, { path: "info" }, function(err,docs) {
        if (err) throw err;

        console.log( JSON.stringify( docs, undefined, 4 ) );
      });

    });

  }
);

तो वहां आपको छोड़ें . दोनों का उपयोग मिला और सीमा कर्सर पर संचालन, एक कर्सर वापस आ गया था और यहां तक ​​कि दस्तावेज़ों को "मोंगोज़ दस्तावेज़" में वापस संसाधित किया था ताकि आप .populate() जैसे कार्यों को कॉल कर सकें। उन पर।

मैं $nearSphere<के साथ मौजूदा मुद्दे की अपेक्षा करता हूं /कोड> हालांकि अपेक्षाकृत जल्द ही तय किया जाएगा।

या इसके बजाय समुच्चय का उपयोग करना:

Shape.aggregate(
  [
    { "$geoNear": {
        "near": {
          "type": "Point",
          "coordinates": [ 2, 4 ]
        },
        "spherical": true,
        "distanceField": "dis"
    }},
    { "$skip": 0 },
    { "$limit": 2 }

  ],
  function(err,shapes) {
    if (err) throw err;
    //console.log( shapes );

    shapes = shapes.map(function(x) {
      delete x.dis;
      return new Shape( x );
    });

    Shape.populate( shapes, { path: "info" }, function(err,docs) {
      if (err) throw err;

      console.log( JSON.stringify( docs, undefined, 4 ) );
    });

  }
);

जहां आप वही काम कर सकते हैं जैसे .populate() . का इस्तेमाल करें . दोनों मामलों में "आबादी" मिलान वाले फ़ील्ड के साथ इस तरह के परिणाम मिलते हैं:

{
    "_id": "P2",
    "amenity": "restaurant",
    "info": {
        "_id": "539b90543249ff8d18e863fb",
        "description": "Jamies Restaurant",
        "__v": 0
    },
    "shape": {
        "type": "Point",
        "coordinates": [
            2,
            4
        ]
    }
},
{
    "info": null,
    "_id": "P4",
    "amenity": "police",
    "shape": {
        "type": "Point",
        "coordinates": [
            4,
            4
        ]
    }
}

बेशक यदि आपको गोलाकार ज्यामिति गणना की आवश्यकता नहीं है तो $निकट ऑपरेटर .find() . के नेवला कार्यान्वयन के साथ पूरी तरह से ठीक काम करता है



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मैं मोंगोडब क्यों नहीं शुरू कर सकता?

  2. MongoDB को पासिंग प्रकार की जानकारी ताकि यह इंटरफ़ेस प्रकारों को ठीक से deserialize कर सके?

  3. पोस्टग्रेएसक्यूएल के विंडो फ़ंक्शंस जैसे लैग, लेड, ओवर की डुप्लिकेटिंग

  4. मॉक/टेस्ट मोंगोडब डेटाबेस Node.js

  5. नेवला - findByIdAndUpdate - req.body के साथ काम नहीं करता

© कॉपीराइट http://hi.sqldat.com सर्वाधिकार सुरक्षित