sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB dropIndex kommando

MongoDB har ett administrationskommando som heter dropIndexes som tappar ett eller flera index (förutom indexet på _id). fält) från den angivna samlingen.

Exempelindex

Anta att vi har en samling som heter posts med följande index:

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 det här fallet har vi fyra index. Den första är standardindexet för _id fält. Det här indexet skapas automatiskt när du skapar en samling och det kan inte tas bort.

De andra tre indexen kan tas bort.

Släpp ett enda index

Om du vill släppa ett enstaka index skickar du samlingens namn, liksom indexnamnet eller dess specifikationsdokument.

Exempel:

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

I det här fallet skickar vi indexnamnet.

Körning som resulterar i följande utdata:

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

Detta talar om för oss att indexet togs bort.

Alternativt kunde vi ha använt indexspecifikationsdokumentet istället för dess namn, så här:

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

Släpp flera index

Om du vill ta bort flera index (men inte alla index), skicka indexnamnen i en array.

Exempel:

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

Resultat:

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

I det här skedet, låt oss kontrollera vår lista med index igen:

db.posts.getIndexes()

Resultat:

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

Som väntat har tre index tagits bort och det finns bara ett kvar (och det kan inte tas bort).

När du skickar en array kan textindex bara tas bort genom att ange indexnamnet. I sådana fall kan du inte släppa textindex genom att ange deras specifikationsdokument, som du kan med andra index.

Släpp alla index

Du kan släppa alla index genom att använda asterisken jokertecken (* ).

För det här exemplet har jag återskapat indexen. Så här ser indexen ut::

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
	}
]

Låt oss nu släppa alla index på en gång:

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

Resultat:

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

Alla index har tagits bort förutom _id index (det indexet kan inte tas bort).

Låt oss kontrollera indexen igen.

db.products.getIndexes()

Resultat:

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

Som förväntat, _id index är det enda som finns kvar.

MongoDB-dokumentation

Se MongoDB-dokumentationen för mer information om dropIndexes kommando.


  1. MongoDB Ruby Driver 2.5.x problem med skiftlägeskänslighet med värdnamn på replikuppsättningar

  2. Redis kommer inte att hämta data från cachen

  3. mongo:avkastningen är inte lika med count()

  4. få aktuellt datum och tid i lua in redis