MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да създадете индекс със специфично име в MongoDB

Когато създадете индекс в MongoDB, ако не посочите име за него, MongoDB ще го присвои.

Името по подразбиране се състои от име на всяко индексирано поле, свързано с ключовата стойност за това поле. Например редът на сортиране или ако е text индекс, низът _text , или ако е 2dsphere индекс, низът _2dsphere и др.

Но можете да зададете свое собствено име, когато създавате индекси в MongoDB.

Името по подразбиране

Да предположим, че създаваме индекс като този:

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

Не посочихме име, така че MongoDB автоматично ще генерира такова въз основа на спецификацията на индекса.

Използваме getIndexes() за да проверите това:

db.employees.getIndexes()

Резултат:

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

Тук има два индекса. Първият е _id по подразбиране индекс, който се създава автоматично с колекцията. Вторият е този, който току-що създадохме.

В този случай MongoDB даде на индекса име name_1_salary_-1 .

Ако някога се наложи да изпуснем този индекс, ще трябва или да запомним името му или дефиницията му. Като се има предвид, че името по подразбиране се основава на дефиницията, то може да стане малко тромаво, ако имате по-сложна дефиниция.

Във всеки случай можем да премахнем горния индекс по следния начин:

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

Посочете име

Ако искахме да създадем собствено име за индекса, можехме да го създадем така:

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

Всичко, което направихме, беше да добавим name поле в незадължителен документ за предоставяне на опции за индекса.

Ако сега проверим индекса, можем да видим, че той има името, което сме предоставили:

db.employees.getIndexes()

Резултат:

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

Включително името с други опции

В предишния пример, name полето е единствената опция, която предоставихме при създаването на индекса. Името не е единствената опция, която можете да посочите за индекс.

Можете също да предоставите други опции, като език по подразбиране, замяна на език и т.н. Всички други опции трябва да бъдат затворени в същия документ, разделени със запетая.

Ето пример за създаване на индекс с две други опции (но без посочване на името):

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

Това е различен индекс в различна колекция от предишната. Но можете да видите, че сме посочили нашия собствен default_language и language_override стойности. Това също е комбиниран индекс (това е индекс, който включва множество полета).

Не посочих име, така че можем да видим колко дълго става името с такъв индекс:

db.employees.getIndexes()

Резултат:

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

Така че в този случай MongoDB даде на индекса име по подразбиране original_name_text_translations.sitcom_name_text , защото това е извлечено от нашата дефиниция на индекс.

Ще трябва да използваме следния код, за да премахнем този индекс по име:

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

За да включим името в такъв индекс, можем да го предоставим в същия документ, който използвахме, за да посочим езика по подразбиране и замяната на езика.

Така че можем да създадем индекса по следния начин:

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

В този случай използвахме sitcoms_da като име на индекса.

Сега, когато получим списък с индекси, можем да видим нашето посочено име:

db.sitcoms.getIndexes()

Резултат:

[
	{
		"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. Автоматично премахване на препращащи обекти при изтриване в MongoDB

  2. Преобразувайте датата от милисекунди в обект ISODate

  3. сървърът върна грешка на стъпката за удостоверяване на SASL:Удостоверяването не бе успешно

  4. Макс и мин в mongodb

  5. Mongodb и MAMP