MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Buat &Temukan GeoLocation di luwak

Jika Anda ingin skema mendukung GeoJSON, pertama-tama Anda harus membuatnya dengan benar:

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

Itu memastikan tidak ada kebingungan dengan kata kunci "type" dari definisi skema. Jika Anda benar-benar ingin mendukung semua jenis GeoJSON, Anda dapat membuatnya sedikit lebih longgar:

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

Selanjutnya Anda ingin mengikat indeks ke shema:

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

Kemudian tentu saja tentukan model dan simpan semuanya dengan benar:

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

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

Perhatikan bahwa data Anda harus dalam bujur lalu lintang memesan seperti yang didukung oleh GeoJSON dan semua formulir kueri geospasial MongoDB.

Selanjutnya, daripada menggali penggunaan perintah database yang tidak jelas secara langsung pada metode driver mentah, gunakan hal-hal yang didukung secara langsung, dan lebih baik. Seperti $geoNear untuk .aggregate() metode:

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

    }
)

Dan sekarang karena datanya adalah GeoJSON, jarak sudah dikonversi ke meter sehingga tidak perlu melakukan pekerjaan konversi lainnya.

Perhatikan juga bahwa Anda telah bermain-main dengan ini, kecuali jika Anda menjatuhkan koleksi, indeks apa pun yang Anda coba akan tetap ada dan itu kemungkinan akan menyebabkan masalah.

Anda dapat menghapus semua indeks dari koleksi di shell mongodb dengan mudah:

db.users.dropIndexes();

Atau karena Anda mungkin perlu melakukan pembentukan ulang data, lalu hapus koleksi dan mulai lagi:

db.users.drop();

Atur semuanya dengan benar dan Anda tidak akan mengalami masalah.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Meningkatkan batas memori untuk pekerjaan agregat mongodb

  2. Bagaimana cara menginstal mongodb di Elastic Beanstalk?

  3. Grup Mongo berdasarkan bulan menggunakan waktu milidetik UNIX

  4. DB Grafik vs. DB Dokumen vs. Triplestores

  5. MongoDB C# Query Array of Objects yang berisi nilai properti