MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB dropIndexes-Befehl

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.