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

Perbaiki "nama indeks harus berupa string" saat Menjatuhkan Beberapa Indeks di MongoDB

Jika Anda menemukan kesalahan “nama indeks harus berupa string” saat menjatuhkan beberapa indeks di MongoDB, itu mungkin karena Anda meneruskan dokumen spesifikasi alih-alih namanya.

Saat Anda menggunakan dropIndexes() metode atau dropIndexes perintah untuk menjatuhkan beberapa indeks, Anda harus melewati nama indeks (bukan dokumen spesifikasi) dalam larik.

Contoh Indeks

Misalkan kita memiliki indeks berikut:

db.posts.getIndexes()

Hasil:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"title" : 1
		},
		"name" : "title_1"
	},
	{
		"v" : 2,
		"key" : {
			"_fts" : "text",
			"_ftsx" : 1
		},
		"name" : "body_text",
		"weights" : {
			"body" : 1
		},
		"default_language" : "english",
		"language_override" : "language",
		"textIndexVersion" : 3
	}
]

Kode Masalah

Berikut contoh kode yang menyebabkan kesalahan ini:

db.posts.dropIndexes( [ 
  { "_fts" : "text", "_ftsx" : 1 }, 
  { "title" : 1 } 
] )

Hasil:

uncaught exception: Error: error dropping indexes : {
	"ok" : 0,
	"errmsg" : "dropIndexes krankykranes.posts (f9083c2c-8291-49d1-95f7-40711186db98) failed to drop multiple indexes [ { _fts: \"text\", _ftsx: 1.0 }, { title: 1.0 } ]: index name must be a string",
	"code" : 14,
	"codeName" : "TypeMismatch"
} :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/collection.js:692:11
@(shell):1:1

Dalam contoh ini, saya mencoba menghapus dua indeks dengan meneruskan dokumen spesifikasinya, tetapi saya mendapatkan kesalahan. Saya harus memberikan nama indeks sebagai gantinya.

Solusi

Untuk memperbaiki masalah ini, saya hanya perlu memberikan nama indeks alih-alih dokumen spesifikasinya:

db.posts.dropIndexes( [ 
  "body_text", 
  "title_1" 
] )

Hasil:

{ "nIndexesWas" : 3, "ok" : 1 }

Itu memberitahu kita bahwa indeks berhasil dijatuhkan.

Periksa Hasil

Kita dapat menjalankan getIndexes() sekali lagi untuk memverifikasi bahwa indeks tidak lagi ada.

db.posts.getIndexes()

Hasil:

[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]

Kedua indeks telah dijatuhkan seperti yang diharapkan.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB pilih di mana dalam array _id?

  2. Implementasi Pemberian Tag Sederhana dengan MongoDB

  3. Pustaka janji default Mongoose tidak digunakan lagi di tumpukan MEAN

  4. Apa cara terbaik untuk melakukan pagination ajax dengan MongoDb dan Nodejs?

  5. Memasukkan data ke array bersarang di mongodb