MongoDB menyediakan tipe indeks geospasial berikut yang mendukung kueri geospasial.
- indeks 2d mendukung kueri yang menghitung geometri pada bidang dua dimensi.
2dsphere
indeks mendukung kueri yang menghitung geometri pada bola mirip bumi.
Pada artikel ini, saya membuat 2dsphere
indeks.
Contoh Koleksi
Misalkan kita memiliki koleksi yang disebut bars
dengan dokumen sebagai berikut:
{ "_id" : 1, "name" : "Boardwalk Social", "location" : { "type" : "Point", "coordinates" : [ 145.77675259719823, -16.919297718553366 ] } } { "_id" : 2, "name" : "The Downunder Bar", "location" : { "type" : "Point", "coordinates" : [ 145.77621640842125, -16.92107838010542 ] } } { "_id" : 3, "name" : "Riley", "location" : { "type" : "Point", "coordinates" : [ 145.7739955395154, -16.916028253292883 ] } } { "_id" : 4, "name" : "Salt House", "location" : { "type" : "Point", "coordinates" : [ 145.78148426655065, -16.91823513430776 ] } } { "_id" : 5, "name" : "Rattle n Hum", "location" : { "type" : "Point", "coordinates" : [ 145.77746095331537, -16.920051942529685 ] } }
Setiap dokumen memiliki informasi lokasi yang disimpan sebagai objek GeoJSON.
Objek GeoJSON memiliki bidang bernama type
yang menentukan jenis objek GeoJSON dan bidang bernama coordinates
yang menentukan koordinat objek.
Buat Indeks 2dsphere
Sekarang mari kita buat 2dsphere
indeks.
db.bars.createIndex( { location : "2dsphere" } )
Keluaran:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
2dsphere
indeks sekarang telah dibuat.
Sekarang kita dapat menggunakan getIndexes()
metode untuk memeriksa indeks kami:
db.bars.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere" }, "name" : "location_2dsphere", "2dsphereIndexVersion" : 3 } ]
Kita dapat melihat bahwa indeks dibuat sebagai 2dsphere
indeks, menggunakan 2dsphereIndexVersion
dari 3
, yang merupakan versi default untuk instalasi MongoDB saya saat ini (4.4).
Buat Indeks 2dsphere Gabungan
Anda dapat menyertakan 2dsphere
kunci indeks dalam indeks gabungan yang digabungkan dengan kunci indeks non-geospasial.
Misalnya, kita dapat menggabungkan location
bidang dengan name
bidang untuk membuat indeks gabungan.
Mari lepaskan indeks dan buat indeks gabungan:
db.bars.dropIndex("location_2dsphere")
db.bars.createIndex( { location : "2dsphere", name : 1 } )
Keluaran:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Dan periksa indeksnya:
db.bars.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere", "name" : 1 }, "name" : "location_2dsphere_name_1", "2dsphereIndexVersion" : 3 } ]
Gabungan 2dsphere
indeks dapat mereferensikan beberapa bidang lokasi dan non-lokasi. Ini berbeda dengan gabungan 2d
indeks, yang terbatas pada referensi hanya satu bidang lokasi dan satu bidang lainnya.
Mengubah 2dsphereIndexVersion
Anda dapat mengubah 2dsphereIndexVersion
dengan menambahkannya sebagai bidang dengan nilai yang diinginkan saat membuat indeks.
Contoh:
db.bars.createIndex(
{ location : "2dsphere" },
{ "2dsphereIndexVersion" : 2 }
)
Keluaran:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Periksa indeks:
db.bars.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere" }, "name" : "location_2dsphere", "2dsphereIndexVersion" : 2 } ]
Indeks ini telah dibuat sebagai 2dsphere
indeks versi 2.
Versi 2 adalah versi default 2dsphere
indeks yang dibuat dalam seri MongoDB 2.6 dan 3.0.
Versi 3 adalah versi default 2dsphere
indeks yang dibuat di MongoDB 3.2 dan yang lebih baru (pada saat penulisan).
Ketika saya membuat indeks tanpa menentukan 2dsphereIndexVersion
bidang, itu membuat indeks menggunakan versi 3, karena itu adalah versi default untuk versi MongoDB saya (4.4).