sql >> Database teknologi >  >> NoSQL >> MongoDB

Ret "indeksnavn skal være en streng", når du dropper flere indekser i MongoDB

Hvis du støder på fejlen "indeksnavn skal være en streng", når du dropper flere indekser i MongoDB, er det sandsynligvis fordi du sender specifikationsdokumentet i stedet for navnet.

Når du bruger dropIndexes() metoden eller dropIndexes kommando for at slette flere indekser, skal du sende indekset navne (ikke specifikationsdokumenterne) i et array.

Eksempler på indekser

Antag, at vi har følgende indekser:

db.posts.getIndexes()

Resultat:

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

Problemkode

Her er et eksempel på kode, der forårsager denne fejl:

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

Resultat:

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

I dette eksempel forsøger jeg at slette to indekser ved at sende deres specifikationsdokumenter, men jeg får en fejl. Jeg skal videregive indeksnavnene i stedet.

Løsning

For at løse dette problem skal jeg blot sende indeksnavnene i stedet for deres specifikationsdokument:

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

Resultat:

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

Det fortæller os, at indekserne blev slettet med succes.

Tjek resultaterne

Vi kan køre getIndexes() igen for at bekræfte, at indekserne ikke længere eksisterer.

db.posts.getIndexes()

Resultat:

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

Begge indekser er blevet droppet som forventet.


  1. Hvordan returneres Redis primaryKey via ARM-skabelonoutput?

  2. Sådan gør du:Scan Salted Apache HBase-tabeller med regionsspecifikke nøgleområder i MapReduce

  3. Almindelige MongoDB-interviewspørgsmål

  4. Hvordan udføres opdateringsoperationer i GridFS (ved hjælp af Java)?