Si vous rencontrez l'erreur "le nom d'index doit être une chaîne" lors de la suppression de plusieurs index dans MongoDB, c'est probablement parce que vous transmettez le document de spécifications au lieu du nom.
Lorsque vous utilisez le dropIndexes()
ou la méthode dropIndexes
commande pour supprimer plusieurs index, vous devez passer l'index noms (pas les documents de spécifications) dans un tableau.
Exemples d'index
Supposons que nous ayons les index suivants :
db.posts.getIndexes()
Résultat :
[ { "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 } ]
Code du problème
Voici un exemple de code qui provoque cette erreur :
db.posts.dropIndexes( [
{ "_fts" : "text", "_ftsx" : 1 },
{ "title" : 1 }
] )
Résultat :
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
Dans cet exemple, j'essaie de supprimer deux index en transmettant leurs documents de spécification, mais j'obtiens une erreur. Je dois passer les noms d'index à la place.
Solution
Pour résoudre ce problème, j'ai simplement besoin de passer les noms d'index au lieu de leur document de spécification :
db.posts.dropIndexes( [
"body_text",
"title_1"
] )
Résultat :
{ "nIndexesWas" : 3, "ok" : 1 }
Cela nous indique que les index ont été supprimés avec succès.
Vérifiez les résultats
Nous pouvons exécuter getIndexes()
à nouveau pour vérifier que les index n'existent plus.
db.posts.getIndexes()
Résultat :
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Les deux index ont été supprimés comme prévu.