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

MongoDB dropIndex-kommando

MongoDB har en administrationskommando kaldet dropIndexes der dropper et eller flere indekser (undtagen indekset på _id felt) fra den angivne samling.

Eksempler på indekser

Antag, at vi har en samling kaldet posts med følgende indekser:

db.pets.getIndexes()

Resultat:

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

I dette tilfælde har vi fire indekser. Den første er standardindekset for _id Mark. Dette indeks oprettes automatisk, når du opretter en samling, og det kan ikke slettes.

De andre tre indekser kan droppes.

Slip et enkelt indeks

For at slette et enkelt indeks skal du videregive samlingsnavnet samt indeksnavnet eller dets specifikationsdokument.

Eksempel:

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

I dette tilfælde videregiver vi indeksnavnet.

Kørsel, der resulterer i følgende output:

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

Dette fortæller os, at indekset blev droppet.

Alternativt kunne vi have brugt indeksspecifikationsdokumentet i stedet for dets navn, sådan her:

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

Slet flere indekser

Hvis du vil slette flere indekser (men ikke alle). indekser), videregive indeksnavnene i et array.

Eksempel:

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

Resultat:

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

Lad os på dette stadium gentjekke vores liste over indekser:

db.posts.getIndexes()

Resultat:

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

Som forventet er tre indeks blevet slettet, og der er kun ét tilbage (og det kan ikke slettes).

Når du passerer et array, kan tekstindekser kun slettes ved at angive indeksnavnet. I sådanne tilfælde kan du ikke droppe tekstindekser ved at angive deres specifikationsdokument, ligesom du kan med andre indekser.

Slet alle indekser

Du kan slette alle indekser ved at bruge stjerne-jokertegnet (* ).

Til dette eksempel har jeg genskabt indekserne. Så indekserne ser således ud::

db.products.getIndexes()

Resultat:

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

Lad os nu droppe alle indekser på én gang:

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

Resultat:

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

Alle indekser blev slettet undtagen _id indeks (det indeks kan ikke slettes).

Lad os tjekke indekserne igen.

db.products.getIndexes()

Resultat:

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

Som forventet, _id indeks er det eneste, der er tilbage.

MongoDB-dokumentation

Se MongoDB-dokumentationen for mere information om dropIndexes kommando.


  1. Eksempler på brug af RedisStore i socket.io

  2. redis bgsave mislykkedes, fordi gaffel Kan ikke allokere hukommelse

  3. Heroku-appen går ned efter MongoDB opdateret til 3.0

  4. MongoDB Samlet sum af hver nøgle på et underdokument