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

Menggunakan properti objek sebagai argumen $maxDistance dalam kueri geolokasi mongodb

Anda tidak dapat melakukan ini seperti ini — secara umum Anda tidak dapat mendasarkan apa pun dalam kueri MongoDB Anda pada nilai dalam koleksi.

Namun, sejak MongoDB 2.4 kami mendukung indeks baru yang disebut 2dsphere yang memungkinkan Anda untuk menyimpan tidak hanya titik dalam database, tetapi juga poligon. Anda akan menyimpan informasi itu dalam dokumen seperti:

db.so.ensureIndex( { loc: '2dsphere' } );
db.so.insert( {
    name: "Firestation 1",
    loc: {
        type: "Polygon",
        coordinates: [ [ [ 0, 0 ], [ 0, 1 ], [ 1, 1 ], [ 1, 0 ], [ 0, 0 ] ] ]
    }
} );

Kemudian Anda dapat menggunakan kueri "berpotongan" untuk mengetahui apakah suatu titik tercakup oleh setiap poligon:

db.so.find( {
    'loc' : {  
        $geoIntersects: { 
            $geometry: { type: 'Point', coordinates: [ 0, 0 ] } 
        } 
    }
} );

Yang kemudian mengembalikan:

{ 
    "_id" : ObjectId("51f24d566775068ab0b786f0"), 
    "name" : "Firestation 1", 
    "loc" : { 
        "type" : "Polygon", 
        "coordinates" : [  [  [  0,  0 ],  [  0,  1 ],  [  1,  1 ],  [  1,  0 ],  [  0,  0 ] ] ] 
    } 
}

Di sini ia menemukan stasiun pemadam kebakaran, karena 0, 0 berada di tengah poligon. Sekarang triknya tentu saja menghitung titik poligon yang membentuk lingkaran yang "berjari-jari" (katakanlah 10km) dari titik pusat. Anda tidak akan bisa mendapatkan lingkaran yang sebenarnya, tetapi segi enam atau segi delapan sudah cukup. Matematika untuk itu tidak terlalu sederhana, tetapi http:// www.movable-type.co.uk/scripts/latlong.html#destPoint memiliki contoh di JavaScript. Cukup lingkari bantalan Anda dalam 8 langkah dari 0 hingga 2PI untuk menghitung titik di sepanjang keliling lingkaran, dan letakkan di koordinat. Pastikan untuk menyematkannya dalam array bersarang ganda dan buat yang pertama dan yang terakhir sama:

{
    name: "Firestation 1",
    loc: {
        type: "Polygon",
        coordinates: [ [
            [ point1-lon, point1-lat ], 
            [ point2-lon, point2-lat ], 
            [ point3-lon, point3-lat ], 
            ...
            [ point1-lon, point1-lat ], 
        ] ]
    }
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Konversikan String ke tanggal atau ISODate menggunakan Mongo Shell di MongoDB

  2. bagaimana saya bisa menemukan array nilai dalam agregasi $match dan mengelompokkan hasilnya?

  3. Luwak:atom FindOne-Or-Insert(), jangan perbarui instance yang ada jika ditemukan

  4. Ukuran tumpukan panggilan maksimum terlampaui saat memasukkan 10.000 dokumen

  5. MongoDB $group dan formasi grup eksplisit dengan kolom yang dihitung