Mulai dari MongoDB 4.4, sekarang kita dapat menyembunyikan indeks dari paket kueri. Hal ini memungkinkan kami untuk mengevaluasi dampak potensial dari penurunan indeks tanpa benar-benar menjatuhkan indeks.
Jika menyembunyikannya berdampak negatif, kami dapat menampilkan file index. Ini menyelamatkan kita dari keharusan menjatuhkan indeks, lalu membuatnya kembali.
Di bawah ini adalah 3 cara untuk menyembunyikan indeks di MongoDB.
The hideIndex()
Metode
db.collection.hideIndex()
metode melakukan persis seperti yang dijanjikan – menyembunyikan indeks (dari perencana kueri).
Contoh:
db.pets.hideIndex("idx_weight_-1")
Keluaran:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
Itu menyembunyikan indeks yang disebut idx_weight_-1
pada pets
koleksi. Sebagai alternatif, kami dapat memberikan pola kunci untuk indeks alih-alih nama.
Keluaran dari hideIndex()
metode menampilkan nilai lama untuk hidden
bidang (dalam hal ini false
) dan nilai baru (dalam hal ini true
).
Namun, jika kami menyembunyikan indeks yang sudah disembunyikan (atau menampilkan yang sudah tidak disembunyikan), ini tidak akan ditampilkan, dan kami hanya mendapatkan yang berikut:
{ "ok" : 1 }
Bagaimanapun, indeks sekarang disembunyikan.
hideIndex()
metode sebenarnya adalah pembungkus untuk collMod
perintah administrasi (di bawah).
collMod
Perintah
collMod
perintah administrasi memungkinkan kita untuk menambahkan opsi ke koleksi atau mengubah definisi tampilan.
Kita dapat menggunakannya untuk menyembunyikan indeks dengan melewatkan hidden: true
.
Contoh:
db.runCommand( {
collMod: "pets",
index: {
name: "idx_weight_-1",
hidden: true
}
} )
Hasil:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
Ini mengembalikan dokumen yang sama dengan hideIndex()
kembali.
Mirip dengan hideIndex()
, Anda memiliki opsi untuk menentukan nama indeks atau pola kuncinya.
Berikut ini contoh penggunaan pola kunci:
db.runCommand( {
collMod: "pets",
index: {
keyPattern: { weight : -1 },
hidden: true
}
} )
Dalam hal ini, indeks didefinisikan menggunakan { weight : -1 }
, sehingga definisi ini dapat digunakan sebagai pengganti nama indeks.
Untuk memverifikasi ini, kita dapat menggunakan getIndexes()
untuk melihat definisi indeks:
db.pets.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1", "hidden" : true } ]
Kami juga dapat menampilkan indeks dengan melewatkan hidden: false
.
Buat Indeks Tersembunyi
Cara ketiga untuk menyembunyikan indeks adalah dengan membuatnya sebagai indeks tersembunyi.
Untuk melakukannya, gunakan hidden: true
sebagai salah satu opsi saat Anda membuat indeks.
Contoh:
db.pets.createIndex(
{ type: 1 },
{ hidden: true }
)
Keluaran:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
Sekarang mari kita panggil getIndexes()
lagi untuk memeriksa indeks tersembunyi kami yang baru dibuat:
db.pets.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1", "hidden" : true }, { "v" : 2, "hidden" : true, "key" : { "type" : 1 }, "name" : "type_1" } ]
Kita dapat melihat bahwa itu telah dibuat dengan "hidden": true
.
Tidak Dapat Menyembunyikan Indeks? Periksa Setelan ini.
mongod
featureCompatibilityVersion
minimal harus 4.4
sebelum Anda dapat menyembunyikan indeks. 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.