sql >> Database >  >> NoSQL >> MongoDB

Fix "indexnaam moet een tekenreeks zijn" bij het laten vallen van meerdere indexen in MongoDB

Als u de foutmelding "indexnaam moet een tekenreeks" tegenkomt bij het verwijderen van meerdere indexen in MongoDB, komt dit waarschijnlijk omdat u het specificatiedocument doorgeeft in plaats van de naam.

Wanneer u de dropIndexes() . gebruikt methode of de dropIndexes commando om meerdere indexen te verwijderen, moet u de index namen doorgeven (niet de specificatiedocumenten) in een array.

Voorbeeldindexen

Stel dat we de volgende indexen hebben:

db.posts.getIndexes()

Resultaat:

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

Probleemcode

Hier is een voorbeeld van code die deze fout veroorzaakt:

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

Resultaat:

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

In dit voorbeeld probeer ik twee indexen te verwijderen door hun specificatiedocumenten door te geven, maar ik krijg een foutmelding. Ik moet in plaats daarvan de indexnamen doorgeven.

Oplossing

Om dit probleem op te lossen, hoef ik alleen de indexnamen door te geven in plaats van hun specificatiedocument:

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

Resultaat:

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

Dat vertelt ons dat de indexen met succes zijn verwijderd.

Controleer de resultaten

We kunnen getIndexes() . uitvoeren nogmaals om te controleren of de indexen niet meer bestaan.

db.posts.getIndexes()

Resultaat:

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

Beide indexen zijn zoals verwacht gedaald.


  1. mongodb zoeken door meerdere array-items

  2. Overzicht van de MongoDB Database Profiler

  3. Hoe MongoDB-veldnaam op willekeurige diepte te vinden

  4. Clouddatabases implementeren met ClusterControl 1.6