sql >> Databáze >  >> NoSQL >> MongoDB

Jak vytvořit index se specifickým názvem v MongoDB

Když vytvoříte index v MongoDB, pokud pro něj neurčíte název, MongoDB mu jej přiřadí.

Výchozí název se skládá z každého indexovaného názvu pole zřetězeného s hodnotou klíče pro toto pole. Například pořadí řazení nebo pokud se jedná o text index, řetězec _text , nebo pokud se jedná o 2dsphere index, řetězec _2dsphere , atd.

Při vytváření indexů v MongoDB však můžete přiřadit svůj vlastní název.

Výchozí název

Předpokládejme, že vytvoříme takový index:

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

Nespecifikovali jsme název, takže MongoDB ho automaticky vygeneruje na základě specifikace indexu.

Používáme getIndexes() pro ověření:

db.employees.getIndexes()

Výsledek:

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

Jsou zde dva indexy. První z nich je výchozí _id index, který je automaticky vytvořen s kolekcí. Druhý je ten, který jsme právě vytvořili.

V tomto případě MongoDB dal indexu název name_1_salary_-1 .

Pokud bychom někdy potřebovali tento index zrušit, museli bychom si zapamatovat jeho název nebo definici. Vzhledem k tomu, že výchozí název je založen na definici, mohlo by to být trochu nepraktické, pokud máte složitější definici.

V každém případě můžeme výše uvedený index vypustit takto:

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

Zadejte název

Pokud bychom chtěli pro index vytvořit vlastní název, mohli bychom jej vytvořit takto:

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

Vše, co jsme udělali, bylo přidat name pole ve volitelném dokumentu pro dodání voleb pro index.

Pokud nyní zkontrolujeme index, uvidíme, že má název, který jsme zadali:

db.employees.getIndexes()

Výsledek:

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

Včetně názvu s dalšími možnostmi

V předchozím příkladu name pole je jediná možnost, kterou jsme poskytli při vytváření indexu. Název není jedinou možností, kterou můžete pro index zadat.

Můžete také poskytnout další možnosti, jako je výchozí jazyk, přepsání jazyka atd. Jakékoli další možnosti musí být uzavřeny ve stejném dokumentu a odděleny čárkou.

Zde je příklad vytvoření indexu se dvěma dalšími možnostmi (ale bez zadání názvu):

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

Toto je jiný index v jiné kolekci než předchozí. Ale můžete vidět, že jsme zadali svůj vlastní default_language a language_override hodnoty. Je to také složený index (je to index, který obsahuje více polí).

Neuvedl jsem jméno, takže můžeme vidět, jak dlouhý bude název s takovým indexem:

db.employees.getIndexes()

Výsledek:

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

Takže v tomto případě MongoDB dal indexu výchozí název original_name_text_translations.sitcom_name_text , protože to je odvozeno z naší definice indexu.

K odstranění tohoto indexu podle názvu bychom museli použít následující kód:

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

Chcete-li název zahrnout do takového indexu, můžeme jej poskytnout ve stejném dokumentu, který jsme použili k určení výchozího jazyka a přepsání jazyka.

Takže bychom mohli vytvořit index takto:

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

V tomto případě jsme použili sitcoms_da jako název indexu.

Nyní, když získáme seznam indexů, můžeme vidět naše zadané jméno:

db.sitcoms.getIndexes()

Výsledek:

[
	{
		"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. Funkce vysílání socket.io a architektura Redis pub/sub

  2. vložit novou hodnotu do vnitřního pole mongodb - mongodb/php

  3. Proč lua skript blokuje redis-server?

  4. Mongodb seskupuje a třídí