MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Comando dropIndexes di MongoDB

MongoDB ha un comando di amministrazione chiamato dropIndexes che elimina uno o più indici (tranne l'indice su _id campo) dalla raccolta specificata.

Indici di esempio

Supponiamo di avere una raccolta chiamata posts con i seguenti indici:

db.pets.getIndexes()

Risultato:

[
	{
		"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 questo caso abbiamo quattro indici. Il primo è l'indice predefinito per _id campo. Questo indice viene creato automaticamente quando crei una raccolta e non può essere eliminato.

Gli altri tre indici possono essere eliminati.

Rilascia un singolo indice

Per eliminare un singolo indice, passa il nome della raccolta, nonché il nome dell'indice o il relativo documento delle specifiche.

Esempio:

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

In questo caso, stiamo passando il nome dell'indice.

L'esecuzione che comporta il seguente output:

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

Questo ci dice che l'indice è stato eliminato.

In alternativa, avremmo potuto utilizzare il documento di specifica dell'indice invece del suo nome, in questo modo:

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

Rilascia più indici

Se desideri eliminare più indici (ma non tutti indici), passa i nomi degli indici in un array.

Esempio:

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

Risultato:

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

A questo punto, controlliamo nuovamente il nostro elenco di indici:

db.posts.getIndexes()

Risultato:

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

Come previsto, sono stati eliminati tre indici e ne è rimasto solo uno (e non può essere eliminato).

Quando si passa una matrice, gli indici di testo possono essere eliminati solo specificando il nome dell'indice. In questi casi, non puoi eliminare gli indici di testo specificando il loro documento di specifica, come puoi fare con altri indici.

Elimina tutti gli indici

Puoi eliminare tutti gli indici utilizzando il carattere jolly asterisco (* ).

Per questo esempio, ho ricreato gli indici. Quindi gli indici si presentano così::

db.products.getIndexes()

Risultato:

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

Ora eliminiamo tutti gli indici contemporaneamente:

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

Risultato:

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

Tutti gli indici sono stati eliminati ad eccezione di _id index (questo indice non può essere eliminato).

Controlliamo di nuovo gli indici.

db.products.getIndexes()

Risultato:

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

Come previsto, il _id index è l'unico che rimane.

Documentazione MongoDB

Consulta la documentazione di MongoDB per ulteriori informazioni su dropIndexes comando.