sql >> Databáze >  >> NoSQL >> MongoDB

Oprava „název indexu musí být řetězec“ při odstraňování více indexů v MongoDB

Pokud se při odstraňování více indexů v MongoDB setkáte s chybou „název indexu musí být řetězec“, je to pravděpodobně proto, že místo názvu předáváte dokument se specifikacemi.

Když použijete dropIndexes() nebo dropIndexes příkaz k odstranění více indexů, musíte předat index jména (nikoli dokumenty specifikací) v poli.

Příklady indexů

Předpokládejme, že máme následující indexy:

db.posts.getIndexes()

Výsledek:

[
	{
		"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
	}
]

Kód problému

Zde je příklad kódu, který tuto chybu způsobuje:

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

Výsledek:

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

V tomto příkladu se pokouším odstranit dva indexy předáním jejich specifikačních dokumentů, ale zobrazí se chyba. Místo toho musím předat názvy indexů.

Řešení

Abych tento problém vyřešil, musím jednoduše předat názvy indexů namísto jejich dokumentu specifikace:

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

Výsledek:

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

To nám říká, že indexy byly úspěšně zrušeny.

Zkontrolujte výsledky

Můžeme spustit getIndexes() znovu, abyste ověřili, že indexy již neexistují.

db.posts.getIndexes()

Výsledek:

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

Oba indexy byly podle očekávání vypuštěny.


  1. MongoDB $týden

  2. Mongoose:jaké jsou rozdíly mezi Model.create a Collection.insert

  3. Vypršení platnosti RedisTemplate nefunguje

  4. Redis – Zvažte přejmenování jednoho z fazolí nebo povolení přepsání nastavením spring.main.allow-bean-definition-overriding=true