MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So erstellen Sie einen Index mit einem bestimmten Namen in MongoDB

Wenn Sie einen Index in MongoDB erstellen und keinen Namen dafür angeben, weist MongoDB einen zu.

Der Standardname besteht aus jedem indizierten Feldnamen, der mit dem Schlüsselwert für dieses Feld verkettet ist. Beispielsweise die Sortierreihenfolge oder ob es sich um text handelt index, die Zeichenfolge _text , oder wenn es sich um eine 2dsphere handelt index, die Zeichenfolge _2dsphere usw.

Sie können jedoch beim Erstellen von Indizes in MongoDB einen eigenen Namen vergeben.

Der Standardname

Angenommen, wir erstellen einen Index wie diesen:

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

Wir haben keinen Namen angegeben, daher generiert MongoDB basierend auf der Indexspezifikation automatisch einen.

Wir verwenden getIndexes() um dies zu überprüfen:

db.employees.getIndexes()

Ergebnis:

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

Hier gibt es zwei Indizes. Die erste ist die Standard-_id Index, der automatisch mit der Sammlung erstellt wird. Die zweite ist die, die wir gerade erstellt haben.

In diesem Fall hat MongoDB dem Index den Namen name_1_salary_-1 gegeben .

Wenn wir diesen Index jemals löschen müssen, müssen wir uns entweder seinen Namen oder seine Definition merken. Da der Standardname auf der Definition basiert, könnte es etwas unhandlich werden, wenn Sie eine komplexere Definition haben.

In jedem Fall können wir den obigen Index wie folgt löschen:

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

Geben Sie einen Namen an

Wenn wir unseren eigenen Namen für den Index erstellen wollten, hätten wir ihn folgendermaßen erstellen können:

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

Wir haben lediglich einen name hinzugefügt Feld innerhalb eines optionalen Dokuments zum Bereitstellen von Optionen für den Index.

Wenn wir jetzt den Index überprüfen, können wir sehen, dass er den von uns angegebenen Namen hat:

db.employees.getIndexes()

Ergebnis:

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

Einschließen des Namens mit anderen Optionen

Im vorherigen Beispiel der name Das Feld ist die einzige Option, die wir beim Erstellen des Index bereitgestellt haben. Der Name ist nicht die einzige Option, die Sie für einen Index angeben können.

Sie können auch andere Optionen angeben, z. B. die Standardsprache, die Sprachüberschreibung usw. Alle anderen Optionen müssen in dasselbe Dokument eingeschlossen werden, getrennt durch ein Komma.

Hier ist ein Beispiel für die Erstellung eines Indexes mit zwei weiteren Optionen (aber ohne Angabe des Namens):

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

Dies ist ein anderer Index für eine andere Sammlung als der vorherige. Aber Sie können sehen, dass wir unsere eigene default_language angegeben haben und ein language_override Werte. Es ist auch ein zusammengesetzter Index (es ist ein Index, der mehrere Felder enthält).

Ich habe keinen Namen angegeben, damit wir sehen können, wie lang der Name mit einem solchen Index wird:

db.employees.getIndexes()

Ergebnis:

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

In diesem Fall gab MongoDB dem Index also den Standardnamen original_name_text_translations.sitcom_name_text , denn das ergibt sich aus unserer Indexdefinition.

Wir müssten den folgenden Code verwenden, um diesen Index nach Namen zu löschen:

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

Um den Namen in einen solchen Index aufzunehmen, können wir ihn in demselben Dokument angeben, das wir verwendet haben, um die Standardsprache und die Sprachüberschreibung anzugeben.

Wir könnten den Index also folgendermaßen erstellen:

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

In diesem Fall haben wir sitcoms_da verwendet als Indexname.

Wenn wir jetzt eine Liste von Indizes erhalten, können wir unseren angegebenen Namen sehen:

db.sitcoms.getIndexes()

Ergebnis:

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