MongoDB hat einen Administrationsbefehl namens dropIndexes
die einen oder mehrere Indizes löscht (außer dem Index auf der _id
Feld) aus der angegebenen Sammlung.
Beispielindizes
Angenommen, wir haben eine Sammlung namens posts
mit den folgenden Indizes:
db.pets.getIndexes()
Ergebnis:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "title" : 1 }, "name" : "title_1" }, { "v" : 2, "key" : { "tags" : 1 }, "name" : "tags_1" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "body_text", "weights" : { "body" : 1 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 } ]
In diesem Fall haben wir vier Indizes. Der erste ist der Standardindex für die _id
Feld. Dieser Index wird automatisch erstellt, wenn Sie eine Sammlung erstellen, und kann nicht gelöscht werden.
Die anderen drei Indizes können gelöscht werden.
Einen einzelnen Index löschen
Um einen einzelnen Index zu löschen, übergeben Sie den Sammlungsnamen sowie den Indexnamen oder sein Spezifikationsdokument.
Beispiel:
db.runCommand( { dropIndexes: "posts", index: "title_1" })
In diesem Fall übergeben wir den Indexnamen.
Das Ausführen führt zu folgender Ausgabe:
{ "nIndexesWas" : 4, "ok" : 1 }
Dies sagt uns, dass der Index gelöscht wurde.
Alternativ hätten wir anstelle des Namens auch das Indexspezifikationsdokument verwenden können, etwa so:
db.runCommand( { dropIndexes: "posts", index: { "title" : 1 } })
Mehrere Indizes löschen
Wenn Sie mehrere Indizes löschen möchten (aber nicht alle Indizes), übergeben Sie die Indexnamen in einem Array.
Beispiel:
db.runCommand( {
dropIndexes: "posts",
index: [ "tags_1", "body_text" ]
})
Ergebnis:
{ "nIndexesWas" : 3, "ok" : 1 }
Sehen wir uns zu diesem Zeitpunkt noch einmal unsere Indexliste an:
db.posts.getIndexes()
Ergebnis:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Wie erwartet wurden drei Indizes gelöscht und es ist nur noch einer übrig (und er kann nicht gelöscht werden).
Beim Übergeben eines Arrays können Textindizes nur durch Angabe des Indexnamens gelöscht werden. In solchen Fällen können Sie Textindizes nicht löschen, indem Sie ihr Spezifikationsdokument angeben, wie Sie dies bei anderen Indizes können.
Alle Indizes löschen
Sie können alle Indizes löschen, indem Sie den Sternchen-Platzhalter (*
).
Für dieses Beispiel habe ich die Indizes neu erstellt. Die Indizes sehen also so aus::
db.products.getIndexes()
Ergebnis:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "title" : 1 }, "name" : "title_1" }, { "v" : 2, "key" : { "tags" : 1 }, "name" : "tags_1" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "body_text", "weights" : { "body" : 1 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 } ]
Lassen Sie uns nun alle Indizes auf einmal löschen:
db.runCommand( { dropIndexes: "posts", index: "*" })
Ergebnis:
{ "nIndexesWas" : 4, "msg" : "non-_id indexes dropped for collection", "ok" : 1 }
Alle Indizes wurden bis auf die _id
gelöscht Index (dieser Index kann nicht gelöscht werden).
Lassen Sie uns die Indizes noch einmal überprüfen.
db.products.getIndexes()
Ergebnis:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
Wie erwartet, die _id
index ist der einzige, der übrig bleibt.
MongoDB-Dokumentation
Weitere Informationen zu den dropIndexes
finden Sie in der MongoDB-Dokumentation Befehl.