MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak utworzyć indeks o określonej nazwie w MongoDB?

Kiedy tworzysz indeks w MongoDB, jeśli nie określisz jego nazwy, MongoDB ją przypisze.

Nazwa domyślna składa się z każdej indeksowanej nazwy pola połączonej z wartością klucza dla tego pola. Na przykład porządek sortowania lub jeśli jest to text indeks, ciąg _text lub jeśli jest to 2dsphere indeks, ciąg _2dsphere itp.

Ale możesz przypisać własną nazwę podczas tworzenia indeksów w MongoDB.

Domyślna nazwa

Załóżmy, że tworzymy indeks taki:

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

Nie określiliśmy nazwy, więc MongoDB automatycznie ją wygeneruje na podstawie specyfikacji indeksu.

Używamy getIndexes() aby to zweryfikować:

db.employees.getIndexes()

Wynik:

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

Są tu dwa indeksy. Pierwszy to domyślny _id indeks, który jest tworzony automatycznie z kolekcją. Drugi to ten, który właśnie stworzyliśmy.

W tym przypadku MongoDB nadał indeksowi nazwę name_1_salary_-1 .

Jeśli kiedykolwiek będziemy musieli porzucić ten indeks, będziemy musieli albo zapamiętać jego nazwę, albo jego definicję. Biorąc pod uwagę, że domyślna nazwa jest oparta na definicji, może być trochę nieporęczna, jeśli masz bardziej złożoną definicję.

W każdym razie możemy usunąć powyższy indeks w ten sposób:

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

Podaj nazwę

Gdybyśmy chcieli stworzyć własną nazwę dla indeksu, moglibyśmy utworzyć ją tak:

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

Wszystko, co zrobiliśmy, to dodanie name pole w opcjonalnym dokumencie do dostarczania opcji dla indeksu.

Jeśli teraz sprawdzimy indeks, zobaczymy, że ma on podaną przez nas nazwę:

db.employees.getIndexes()

Wynik:

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

Dołączanie nazwy do innych opcji

W poprzednim przykładzie name pole to jedyna opcja, którą podaliśmy podczas tworzenia indeksu. Nazwa nie jest jedyną opcją, którą możesz określić dla indeksu.

Możesz także podać inne opcje, takie jak domyślny język, nadpisanie języka itp. Wszelkie inne opcje będą musiały być zawarte w tym samym dokumencie, oddzielone przecinkiem.

Oto przykład tworzenia indeksu z dwiema innymi opcjami (ale bez określania nazwy):

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

To jest inny indeks w innej kolekcji niż poprzedni. Ale widać, że określiliśmy nasz własny default_language i language_override wartości. Jest to również indeks złożony (jest to indeks zawierający wiele pól).

Nie podałem nazwy, więc możemy zobaczyć, jak długa będzie nazwa z takim indeksem:

db.employees.getIndexes()

Wynik:

[
	{
		"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 więc w tym przypadku MongoDB nadał indeksowi domyślną nazwę original_name_text_translations.sitcom_name_text , ponieważ pochodzi z naszej definicji indeksu.

Musielibyśmy użyć następującego kodu, aby usunąć ten indeks według nazwy:

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

Aby uwzględnić nazwę w takim indeksie, możemy podać ją w tym samym dokumencie, w którym określiliśmy domyślny język i nadpisanie języka.

Możemy więc utworzyć indeks w ten sposób:

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

W tym przypadku użyliśmy sitcoms_da jako nazwa indeksu.

Teraz, gdy otrzymamy listę indeksów, możemy zobaczyć naszą podaną nazwę:

db.sitcoms.getIndexes()

Wynik:

[
	{
		"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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jaki jest najlepszy graficzny interfejs użytkownika MongoDB? — Aktualizacja 2019

  2. Kopiuj/klonuj kolekcję w MongoDB

  3. Korzystanie z funkcji Mongoose / MongoDB $addToSet na tablicy obiektów

  4. Opcja useFindAndModify nie jest obsługiwana

  5. Jak zacząć korzystać z ClusterControl