MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Commande MongoDB dropIndexes

MongoDB a une commande d'administration appelée dropIndexes qui supprime un ou plusieurs index (sauf l'index sur le _id champ) de la collection spécifiée.

Exemples d'index

Supposons que nous ayons une collection appelée posts avec les index suivants :

db.pets.getIndexes()

Résultat :

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

Dans ce cas, nous avons quatre index. Le premier est l'index par défaut pour le _id domaine. Cet index est créé automatiquement lorsque vous créez une collection, et il ne peut pas être supprimé.

Les trois autres index peuvent être supprimés.

Supprimer un index unique

Pour supprimer un seul index, transmettez le nom de la collection, ainsi que le nom de l'index ou son document de spécification.

Exemple :

db.runCommand( { dropIndexes: "posts", index: "title_1" })

Dans ce cas, nous transmettons le nom de l'index.

Exécution qui donne le résultat suivant :

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

Cela nous indique que l'index a été supprimé.

Alternativement, nous aurions pu utiliser le document de spécification d'index au lieu de son nom, comme ceci :

db.runCommand( { dropIndexes: "posts", index: { "title" : 1 } })

Supprimer plusieurs index

Si vous souhaitez supprimer plusieurs index (mais pas tous indexes), passez les noms d'index dans un tableau.

Exemple :

db.runCommand( { 
  dropIndexes: "posts", 
  index: [ "tags_1", "body_text" ] 
})

Résultat :

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

A ce stade, revérifions notre liste d'index :

db.posts.getIndexes()

Résultat :

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

Comme prévu, trois index ont été supprimés et il n'en reste plus qu'un (et il ne peut pas être supprimé).

Lors du passage d'un tableau, les index de texte ne peuvent être supprimés qu'en spécifiant le nom de l'index. Dans de tels cas, vous ne pouvez pas supprimer les index de texte en spécifiant leur document de spécification, comme vous le pouvez avec d'autres index.

Supprimer tous les index

Vous pouvez supprimer tous les index en utilisant le caractère générique astérisque (* ).

Pour cet exemple, j'ai recréé les index. Ainsi, les index ressemblent à ceci : :

db.products.getIndexes()

Résultat :

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

Supprimons maintenant tous les index d'un coup :

db.runCommand( { dropIndexes: "posts", index: "*" })

Résultat :

{
	"nIndexesWas" : 4,
	"msg" : "non-_id indexes dropped for collection",
	"ok" : 1
}

Tous les index ont été supprimés à l'exception de _id index (cet index ne peut pas être supprimé).

Vérifions à nouveau les index.

db.products.getIndexes()

Résultat :

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

Comme prévu, le _id index est le seul qui reste.

Documentation MongoDB

Voir la documentation MongoDB pour plus d'informations sur les dropIndexes commande.