sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo crear un índice con un nombre específico en MongoDB

Cuando crea un índice en MongoDB, si no le especifica un nombre, MongoDB le asignará uno.

El nombre predeterminado consta de cada nombre de campo indexado concatenado con el valor clave para ese campo. Por ejemplo, el orden de clasificación, o si es un text index, la cadena _text , o si es un 2dsphere index, la cadena _2dsphere , etc.

Pero puede asignar su propio nombre al crear índices en MongoDB.

El nombre predeterminado

Supongamos que creamos un índice como este:

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

No especificamos un nombre, por lo que MongoDB generará uno automáticamente, según la especificación del índice.

Usamos getIndexes() para verificar esto:

db.employees.getIndexes()

Resultado:

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

Hay dos índices aquí. El primero es el _id predeterminado. índice que se crea automáticamente con la colección. El segundo es el que acabamos de crear.

En este caso, MongoDB le dio al índice el nombre de name_1_salary_-1 .

Si alguna vez necesitamos eliminar este índice, debemos recordar su nombre o su definición. Dado que el nombre predeterminado se basa en la definición, podría volverse un poco difícil de manejar si tiene una definición más compleja.

En cualquier caso, podemos soltar el índice anterior así:

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

Especifique un nombre

Si quisiéramos crear nuestro propio nombre para el índice, podríamos haberlo creado así:

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

Todo lo que hicimos fue agregar un name campo dentro de un documento opcional para proporcionar opciones para el índice.

Si ahora revisamos el índice, podemos ver que tiene el nombre que le proporcionamos:

db.employees.getIndexes()

Resultado:

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

Incluir el nombre con otras opciones

En el ejemplo anterior, el name El campo es la única opción que proporcionamos al crear el índice. El nombre no es la única opción que puede especificar para un índice.

También puede proporcionar otras opciones, como el idioma predeterminado, la sustitución de idioma, etc. Cualquier otra opción deberá incluirse en el mismo documento, separada por una coma.

Aquí hay un ejemplo de cómo crear un índice con otras dos opciones (pero sin especificar el nombre):

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

Este es un índice diferente en una colección diferente a la anterior. Pero puede ver que hemos especificado nuestro propio default_language y un language_override valores. También es un índice compuesto (es un índice que incluye varios campos).

No especifiqué un nombre, así que podemos ver cuánto tiempo se vuelve el nombre con dicho índice:

db.employees.getIndexes()

Resultado:

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

Entonces, en este caso, MongoDB le dio al índice un nombre predeterminado de original_name_text_translations.sitcom_name_text , porque eso se deriva de nuestra definición de índice.

Necesitaríamos usar el siguiente código para colocar este índice por nombre:

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

Para incluir el nombre en dicho índice, podemos proporcionarlo en el mismo documento que usamos para especificar el idioma predeterminado y la sustitución de idioma.

Entonces podríamos crear el índice así:

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

En este caso usamos sitcoms_da como el nombre del índice.

Ahora, cuando obtengamos una lista de índices, podemos ver nuestro nombre especificado:

db.sitcoms.getIndexes()

Resultado:

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