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

Buat Indeks Geospasial 2dsphere untuk Kueri Bulat di MongoDB

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).


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB Gagal Memulai - ***batalkan setelah kegagalan fassert()

  2. Mongo Urutkan berdasarkan Hitungan Kecocokan dalam Array

  3. gangguan mongoDB pada array

  4. Mengakses database produksi Meteor

  5. Mengurutkan mongo pada kondisi yang diperhitungkan