sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man skapar ett index med ett specifikt namn i MongoDB

När du skapar ett index i MongoDB, om du inte anger ett namn för det, kommer MongoDB att tilldela ett.

Standardnamnet består av varje indexerat fältnamn sammanlänkade med nyckelvärdet för det fältet. Till exempel sorteringsordningen, eller om det är en text index, strängen _text , eller om det är en 2dsphere index, strängen _2dsphere , etc.

Men du kan tilldela ditt eget namn när du skapar index i MongoDB.

Standardnamnet

Anta att vi skapar ett index så här:

db.employees.createIndex(
  { 
    name: 1, 
    salary: -1 }
  )

Vi angav inget namn, så MongoDB kommer automatiskt att generera ett, baserat på indexspecifikationen.

Vi använder getIndexes() för att verifiera detta:

db.employees.getIndexes()

Resultat:

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

Det finns två index här. Den första är standard _id index som skapas automatiskt med samlingen. Den andra är den vi nyss skapade.

I det här fallet gav MongoDB indexet namnet name_1_salary_-1 .

Om vi ​​någonsin behöver ta bort detta index, skulle vi antingen behöva komma ihåg dess namn eller dess definition. Med tanke på att standardnamnet är baserat på definitionen kan det bli lite otympligt om du har en mer komplex definition.

I alla fall kan vi släppa ovanstående index så här:

db.employees.dropIndex("name_1_salary_-1")

Ange ett namn

Om vi ​​ville skapa ett eget namn för indexet kunde vi ha skapat det så här:

db.employees.createIndex(
  { 
    name: 1,
    salary: -1 
  },
  { 
    name: "employee_salary" 
    }
)

Allt vi gjorde var att lägga till ett name fältet i ett valfritt dokument för att tillhandahålla alternativ för indexet.

Om vi ​​nu kontrollerar indexet kan vi se att det har namnet som vi angav:

db.employees.getIndexes()

Resultat:

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

Inklusive namnet med andra alternativ

I föregående exempel, name fältet är det enda alternativet som vi gav när vi skapade indexet. Namnet är inte det enda alternativet du kan ange för ett index.

Du kan också tillhandahålla andra alternativ, såsom standardspråk, språköverstyrning, etc. Alla andra alternativ måste inkluderas i samma dokument, avgränsade med kommatecken.

Här är ett exempel på att skapa ett index med två andra alternativ (men utan att ange namnet):

db.sitcoms.createIndex( 
  { 
    "original_name": "text",
    "translations.sitcom_name": "text"
  },
  {
    "default_language": "danish",
    "language_override": "sprog"
  }
)

Detta är ett annat index på en annan samling än den föregående. Men du kan se att vi har angett vårt eget default_language och en language_override värden. Det är också ett sammansatt index (det är ett index som innehåller flera fält).

Jag angav inget namn, så vi kan se hur länge namnet blir med ett sådant index:

db.employees.getIndexes()

Resultat:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"_fts" : "text",
			"_ftsx" : 1
		},
		"name" : "original_name_text_translations.sitcom_name_text",
		"default_language" : "danish",
		"language_override" : "sprog",
		"weights" : {
			"original_name" : 1,
			"translations.sitcom_name" : 1
		},
		"textIndexVersion" : 3
	}
]

Så i det här fallet gav MongoDB indexet standardnamnet original_name_text_translations.sitcom_name_text , eftersom det härrör från vår indexdefinition.

Vi skulle behöva använda följande kod för att släppa detta index efter namn:

db.sitcoms.dropIndex("original_name_text_translations.sitcom_name_text")

För att inkludera namnet i ett sådant index kan vi tillhandahålla det i samma dokument som vi använde för att ange standardspråk och språköverstyrning.

Så vi kunde skapa indexet så här:

db.sitcoms.createIndex( 
  { 
    "original_name": "text",
    "translations.sitcom_name": "text"
  },
  {
    "default_language": "danish",
    "language_override": "sprog",
    "name": "sitcoms_da"
  }
)

I det här fallet använde vi sitcoms_da som indexnamn.

Nu när vi får en lista med index kan vi se vårt angivna namn:

db.sitcoms.getIndexes()

Resultat:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"_fts" : "text",
			"_ftsx" : 1
		},
		"name" : "sitcoms_da",
		"default_language" : "danish",
		"language_override" : "sprog",
		"weights" : {
			"original_name" : 1,
			"translations.sitcom_name" : 1
		},
		"textIndexVersion" : 3
	}
]

  1. Introduktion till Redis Data Structures:Sorterade uppsättningar

  2. MongoDB $lt Aggregation Pipeline Operator

  3. Spring Boot redis Template autokabelkoppling misslyckades

  4. Webbskrapning med Scrapy och MongoDB