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

Cara Membuat Indeks dengan Nama Tertentu di MongoDB

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
	}
]

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. (MongoDB Java) $push ke dalam array

  2. kecualikan bidang dalam agregasi $lookup

  3. Cara Menjatuhkan Database di MongoDB dari Command Line

  4. Cara terbaik untuk menyimpan tanggal/waktu di mongodb

  5. mongod --bind_ip menggunakan docker-compose versi 2