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

Sådan opretter du et indeks med et specifikt navn i MongoDB

Når du opretter et indeks i MongoDB, hvis du ikke angiver et navn til det, vil MongoDB tildele et.

Standardnavnet består af hvert indekseret feltnavn sammenkædet med nøgleværdien for det pågældende felt. For eksempel sorteringsrækkefølgen, eller hvis det er en text indeks, strengen _text , eller hvis det er en 2dsphere indeks, strengen _2dsphere osv.

Men du kan tildele dit eget navn, når du opretter indekser i MongoDB.

Standardnavnet

Antag, at vi opretter et indeks som dette:

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

Vi har ikke angivet et navn, så MongoDB vil automatisk generere et, baseret på indeksspecifikationen.

Vi bruger getIndexes() for at bekræfte dette:

db.employees.getIndexes()

Resultat:

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

Der er to indekser her. Den første er standard _id indeks, der automatisk oprettes med samlingen. Den anden er den, vi lige har oprettet.

I dette tilfælde gav MongoDB indekset navnet name_1_salary_-1 .

Hvis vi nogensinde bliver nødt til at droppe dette indeks, skal vi enten huske dets navn eller definition. Da standardnavnet er baseret på definitionen, kan det blive lidt uhåndterligt, hvis du har en mere kompleks definition.

Under alle omstændigheder kan vi droppe ovenstående indeks sådan her:

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

Angiv et navn

Hvis vi ville lave vores eget navn til indekset, kunne vi have lavet det sådan her:

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

Det eneste, vi gjorde, var at tilføje et name felt i et valgfrit dokument til at angive muligheder for indekset.

Hvis vi nu tjekker indekset, kan vi se, at det har det navn, som vi har leveret:

db.employees.getIndexes()

Resultat:

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

Inkluderer navnet med andre muligheder

I det foregående eksempel, name felt er den eneste mulighed, vi gav, da vi oprettede indekset. Navnet er ikke den eneste mulighed, du kan angive for et indeks.

Du kan også angive andre muligheder, såsom standardsproget, sprogtilsidesættelse osv. Alle andre muligheder skal være omgivet af det samme dokument, adskilt af et komma.

Her er et eksempel på oprettelse af et indeks med to andre muligheder (men uden at angive navnet):

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

Dette er et andet indeks på en anden samling end den forrige. Men du kan se, at vi har angivet vores eget default_language og en language_override værdier. Det er også et sammensat indeks (det er et indeks, der inkluderer flere felter).

Jeg har ikke angivet et navn, så vi kan se, hvor længe navnet bliver med sådan et indeks:

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 dette tilfælde gav MongoDB indekset et standardnavn på original_name_text_translations.sitcom_name_text , fordi det er afledt af vores indeksdefinition.

Vi skal bruge følgende kode for at slette dette indeks efter navn:

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

For at inkludere navnet i et sådant indeks kan vi angive det i det samme dokument, som vi brugte til at angive standardsproget og sprogtilsidesættelsen.

Så vi kunne oprette indekset sådan her:

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

I dette tilfælde brugte vi sitcoms_da som indeksnavn.

Når vi nu får en liste over indekser, kan vi se vores specificerede navn:

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. 5 måder at få referatet fra en date på i MongoDB

  2. Visualisering af din klyngetopologi i ClusterControl

  3. Sådan returneres kun værdien af ​​et felt i mongodb

  4. Microsoft.Extensions.Caching.Redis vælg en anden database end db0