Saat Anda membuat indeks di MongoDB, jika Anda tidak menentukan nama untuk indeks tersebut, MongoDB akan menetapkannya.
Nama default terdiri dari setiap nama bidang yang diindeks yang digabungkan dengan nilai kunci untuk bidang itu. Misalnya, urutan pengurutan, atau jika itu adalah text
indeks, string _text
, atau jika itu adalah 2dsphere
indeks, string _2dsphere
, dll.
Tetapi Anda dapat menetapkan nama Anda sendiri saat membuat indeks di MongoDB.
Nama Default
Misalkan kita membuat indeks seperti ini:
db.employees.createIndex(
{
name: 1,
salary: -1 }
)
Kami tidak menentukan nama, jadi MongoDB akan secara otomatis membuatnya, berdasarkan spesifikasi indeks.
Kami menggunakan getIndexes()
untuk memverifikasi ini:
db.employees.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "name" : 1, "salary" : -1 }, "name" : "name_1_salary_-1" } ]
Ada dua indeks di sini. Yang pertama adalah _id
default indeks yang secara otomatis dibuat dengan koleksi. Yang kedua adalah yang baru saja kita buat.
Dalam hal ini, MongoDB memberi indeks nama name_1_salary_-1
.
Jika kita perlu menghapus indeks ini, kita perlu mengingat nama atau definisinya. Mengingat nama default didasarkan pada definisi, itu bisa menjadi sedikit berat jika Anda memiliki definisi yang lebih kompleks.
Bagaimanapun, kita dapat menjatuhkan indeks di atas seperti ini:
db.employees.dropIndex("name_1_salary_-1")
Tentukan Nama
Jika kita ingin membuat nama sendiri untuk indeks, kita bisa membuatnya seperti ini:
db.employees.createIndex(
{
name: 1,
salary: -1
},
{
name: "employee_salary"
}
)
Yang kami lakukan hanyalah menambahkan name
bidang dalam dokumen opsional untuk menyediakan opsi untuk indeks.
Jika kita sekarang memeriksa indeks, kita dapat melihat bahwa ia memiliki nama yang kita berikan:
db.employees.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "name" : 1, "salary" : -1 }, "name" : "employee_salary" } ]
Menyertakan Nama dengan Opsi Lain
Pada contoh sebelumnya, name
field adalah satu-satunya pilihan yang kami sediakan saat membuat index. Nama bukan satu-satunya opsi yang dapat Anda tentukan untuk indeks.
Anda juga dapat memberikan opsi lain, seperti bahasa default, penggantian bahasa, dll. Opsi lain apa pun harus diapit dalam dokumen yang sama, dipisahkan dengan koma.
Berikut ini contoh membuat indeks dengan dua opsi lain (tetapi tanpa menyebutkan namanya):
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish",
"language_override": "sprog"
}
)
Ini adalah indeks yang berbeda pada koleksi yang berbeda dengan yang sebelumnya. Tetapi Anda dapat melihat bahwa kami telah menentukan default_language
kami sendiri dan language_override
nilai-nilai. Ini juga merupakan indeks gabungan (ini adalah indeks yang mencakup banyak bidang).
Saya tidak menentukan nama, jadi kita bisa melihat berapa lama nama itu dengan indeks seperti itu:
db.employees.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "original_name_text_translations.sitcom_name_text", "default_language" : "danish", "language_override" : "sprog", "weights" : { "original_name" : 1, "translations.sitcom_name" : 1 }, "textIndexVersion" : 3 } ]
Jadi dalam hal ini MongoDB memberi indeks nama default original_name_text_translations.sitcom_name_text
, karena itu berasal dari definisi indeks kami.
Kita perlu menggunakan kode berikut untuk menghapus indeks ini berdasarkan nama:
db.sitcoms.dropIndex("original_name_text_translations.sitcom_name_text")
Untuk memasukkan nama dalam indeks seperti itu, kami dapat menyediakannya di dokumen yang sama yang kami gunakan untuk menentukan bahasa default dan penggantian bahasa.
Jadi kita bisa membuat indeks seperti ini:
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish",
"language_override": "sprog",
"name": "sitcoms_da"
}
)
Dalam hal ini kami menggunakan sitcoms_da
sebagai nama indeks.
Sekarang ketika kita mendapatkan daftar indeks, kita dapat melihat nama yang kita tentukan:
db.sitcoms.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "sitcoms_da", "default_language" : "danish", "language_override" : "sprog", "weights" : { "original_name" : 1, "translations.sitcom_name" : 1 }, "textIndexVersion" : 3 } ]