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

Bagaimana unhideIndex() Bekerja di MongoDB

Di MongoDB, db.collection.unhideIndex() metode memperlihatkan indeks tersembunyi.

Indeks tersembunyi adalah indeks yang disembunyikan dari perencana kueri. Saat Anda memperlihatkan indeks, indeks tidak lagi disembunyikan dari perencana kueri, dan segera tersedia untuk digunakan.

Contoh

Misalkan kita memiliki koleksi yang disebut pets , dan kami ingin memeriksanya untuk indeks tersembunyi. Kami dapat menjalankan kueri berikut untuk mengembalikan semua indeks pada koleksi:

db.pets.getIndexes()

Hasil:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"name" : 1,
			"type" : -1
		},
		"name" : "idx_name_1_type_-1"
	},
	{
		"v" : 2,
		"key" : {
			"weight" : -1
		},
		"name" : "idx_weight_-1",
		"hidden" : true
	}
]

Kita dapat melihat bahwa ada tiga indeks. Yang ketiga tersembunyi. Kita tahu itu, karena memiliki "hidden" : true .

Indeks itu ada di weight bidang. Saat kami menjalankan kueri melalui paket kueri yang menanyakan weight bidang, kita akan melihat bahwa itu tidak menggunakan indeks.

Contoh:

db.pets.find( { weight: { $gt: 10 } } ).explain()

Hasil:

{
	"queryPlanner" : {
		"plannerVersion" : 1,
		"namespace" : "PetHouse.pets",
		"indexFilterSet" : false,
		"parsedQuery" : {
			"weight" : {
				"$gt" : 10
			}
		},
		"queryHash" : "CEB852E7",
		"planCacheKey" : "851FBDB5",
		"winningPlan" : {
			"stage" : "COLLSCAN",
			"filter" : {
				"weight" : {
					"$gt" : 10
				}
			},
			"direction" : "forward"
		},
		"rejectedPlans" : [ ]
	},
	"ok" : 1
}

Kita dapat melihat bahwa ia melakukan COLLSCAN (pemindaian koleksi), yang berarti tidak menggunakan indeks.

Menampilkan Indeks

Kita dapat menggunakan unhideIndex() metode untuk menyembunyikan file index. Metode ini menerima nama indeks atau pola kuncinya sebagai parameter untuk menentukan indeks mana yang akan ditampilkan.

Contoh:

db.pets.unhideIndex("idx_weight_-1")

Keluaran:

{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }

Keluaran dari unhideIndex() metode menampilkan nilai lama untuk hidden bidang (dalam hal ini true ) dan nilai baru (dalam hal ini false ).

Namun, jika kami memperlihatkan indeks yang sudah tidak disembunyikan (atau menyembunyikan yang sudah disembunyikan), ini tidak akan ditampilkan, dan kami hanya mendapatkan yang berikut:

{ "ok" : 1 }

Bagaimanapun, indeks sekarang tidak disembunyikan.

Periksa Ulang Paket Kueri

Mari kita jalankan kembali kueri sebelumnya untuk melihat seperti apa rencana kueri sekarang.

db.pets.find( { weight: { $gt: 10 } } ).explain()

Hasil:

{
	"queryPlanner" : {
		"plannerVersion" : 1,
		"namespace" : "PetHouse.pets",
		"indexFilterSet" : false,
		"parsedQuery" : {
			"weight" : {
				"$gt" : 10
			}
		},
		"queryHash" : "CEB852E7",
		"planCacheKey" : "851FBDB5",
		"winningPlan" : {
			"stage" : "FETCH",
			"inputStage" : {
				"stage" : "IXSCAN",
				"keyPattern" : {
					"weight" : -1
				},
				"indexName" : "idx_weight_-1",
				"isMultiKey" : false,
				"multiKeyPaths" : {
					"weight" : [ ]
				},
				"isUnique" : false,
				"isSparse" : false,
				"isPartial" : false,
				"indexVersion" : 2,
				"direction" : "forward",
				"indexBounds" : {
					"weight" : [
						"[inf.0, 10.0)"
					]
				}
			}
		},
		"rejectedPlans" : [ ]
	},
	"ok" : 1
}

Kita dapat melihat bahwa itu menggunakan IXSCAN , yang berarti menggunakan indeks.

Periksa Apakah Indeks Telah Disembunyikan

Kita dapat menggunakan getIndexes() metode lagi untuk memeriksa apakah indeks telah disembunyikan atau tidak.

db.pets.getIndexes()

Hasil:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"name" : 1,
			"type" : -1
		},
		"name" : "idx_name_1_type_-1"
	},
	{
		"v" : 2,
		"key" : {
			"weight" : -1
		},
		"name" : "idx_weight_-1"
	}
]

Kami melihat tiga indeks yang sama seperti yang kami lihat pada contoh sebelumnya, tetapi kali ini kami tidak melihat "hidden" : true .

Tapi kami juga tidak melihat "hidden" : false .

Menampilkan indeks hanya menghapus "hidden" : true bagian dari hasil getIndexes() . hidden opsi hanya tersedia jika nilainya true . hidden option adalah nilai boolean, jadi kami dapat menyimpulkan bahwa jika bukan "hidden" : true , maka "hidden" : false .

Tidak Dapat Menyembunyikan/Menampilkan Indeks? Periksa Setelan ini.

mongod featureCompatibilityVersion minimal harus 4.4 sebelum Anda dapat menyembunyikan index. Namun, setelah disembunyikan, indeks akan tetap tersembunyi bahkan dengan featureCompatibilityVersion setel ke 4.2 pada binari MongoDB 4.4.

Anda dapat memeriksa featureCompatibilityVersion setting dengan kode berikut:

db.adminCommand( 
    { 
        getParameter: 1, 
        featureCompatibilityVersion: 1 
    } 
)

Anda dapat mengaturnya menggunakan setFeatureCompatibilityVersion perintah:

db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )

setFeatureCompatibilityVersion perintah harus dijalankan di admin basis data.

Perhatikan juga, Anda tidak dapat menyembunyikan _id indeks.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Memeriksa Koneksi ke MongoDB

  2. MongoDB dengan Mongoid di Rel - Pengindeksan Geospasial

  3. Buat Indeks Teks Multi-Bahasa di MongoDB

  4. Bagaimana Saya Menulis Aplikasi Chart-Topping dalam Seminggu dengan Realm dan SwiftUI

  5. Nama bidang FieldPath tidak boleh berisi '.' di $grup