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.