MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment créer un index avec un nom spécifique dans MongoDB

Lorsque vous créez un index dans MongoDB, si vous ne spécifiez pas de nom, MongoDB en attribuera un.

Le nom par défaut se compose de chaque nom de champ indexé concaténé avec la valeur clé de ce champ. Par exemple, l'ordre de tri, ou s'il s'agit d'un text index, la chaîne _text , ou s'il s'agit d'une 2dsphere index, la chaîne _2dsphere , etc.

Mais vous pouvez attribuer votre propre nom lors de la création d'index dans MongoDB.

Le nom par défaut

Supposons que nous créons un index comme celui-ci :

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

Nous n'avons pas spécifié de nom, donc MongoDB en générera automatiquement un, basé sur la spécification de l'index.

Nous utilisons getIndexes() pour vérifier ceci :

db.employees.getIndexes()

Résultat :

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

Il y a deux index ici. Le premier est le _id par défaut index créé automatiquement avec la collection. Le second est celui que nous venons de créer.

Dans ce cas, MongoDB a donné à l'index le nom de name_1_salary_-1 .

Si jamais nous devions supprimer cet index, nous devions soit nous souvenir de son nom, soit de sa définition. Étant donné que le nom par défaut est basé sur la définition, cela pourrait devenir un peu compliqué si vous avez une définition plus complexe.

Dans tous les cas, nous pouvons supprimer l'index ci-dessus comme ceci :

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

Spécifiez un nom

Si nous voulions créer notre propre nom pour l'index, nous aurions pu le créer comme ceci :

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

Tout ce que nous avons fait a été d'ajouter un name dans un document facultatif pour fournir des options pour l'index.

Si nous vérifions maintenant l'index, nous pouvons voir qu'il porte le nom que nous avons fourni :

db.employees.getIndexes()

Résultat :

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

Inclusion du nom avec d'autres options

Dans l'exemple précédent, le name field est la seule option que nous avons fournie lors de la création de l'index. Le nom n'est pas la seule option que vous pouvez spécifier pour un index.

Vous pouvez également fournir d'autres options, telles que la langue par défaut, le remplacement de la langue, etc. Toutes les autres options devront être incluses dans le même document, séparées par une virgule.

Voici un exemple de création d'un index avec deux autres options (mais sans préciser le nom) :

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

Il s'agit d'un index différent sur une collection différente de la précédente. Mais vous pouvez voir que nous avons spécifié notre propre default_language et un language_override valeurs. C'est aussi un index composé (c'est un index qui comprend plusieurs champs).

Je n'ai pas spécifié de nom, nous pouvons donc voir combien de temps le nom devient avec un tel index :

db.employees.getIndexes()

Résultat :

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

Donc, dans ce cas, MongoDB a donné à l'index un nom par défaut de original_name_text_translations.sitcom_name_text , car cela est dérivé de notre définition d'index.

Nous aurions besoin d'utiliser le code suivant pour supprimer cet index par nom :

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

Pour inclure le nom dans un tel index, nous pouvons le fournir dans le même document que celui que nous avons utilisé pour spécifier la langue par défaut et le remplacement de la langue.

Nous pourrions donc créer l'index comme ceci :

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

Dans ce cas, nous avons utilisé sitcoms_da comme nom d'index.

Maintenant, lorsque nous obtenons une liste d'index, nous pouvons voir notre nom spécifié :

db.sitcoms.getIndexes()

Résultat :

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