Ao criar um índice no MongoDB, se você não especificar um nome para ele, o MongoDB atribuirá um.
O nome padrão consiste em cada nome de campo indexado concatenado com o valor da chave desse campo. Por exemplo, a ordem de classificação ou se for um
text
index, a string _text
, ou se for um 2dsphere
index, a string _2dsphere
, etc Mas você pode atribuir seu próprio nome ao criar índices no MongoDB.
O nome padrão
Suponha que criamos um índice como este:
db.employees.createIndex(
{
name: 1,
salary: -1 }
)
Nós não especificamos um nome, então o MongoDB irá gerar um automaticamente, baseado na especificação do índice.
Usamos
getIndexes()
para verificar isso:db.employees.getIndexes()
Resultado:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "name" : 1, "salary" : -1 }, "name" : "name_1_salary_-1" } ]
Existem dois índices aqui. O primeiro é o padrão
_id
índice que é criado automaticamente com a coleção. O segundo é o que acabamos de criar. Nesse caso, o MongoDB deu ao índice um nome de
name_1_salary_-1
. Se algum dia precisarmos eliminar esse índice, precisaremos lembrar seu nome ou sua definição. Dado que o nome padrão é baseado na definição, pode ficar um pouco complicado se você tiver uma definição mais complexa.
De qualquer forma, podemos descartar o índice acima assim:
db.employees.dropIndex("name_1_salary_-1")
Especifique um nome
Se quiséssemos criar nosso próprio nome para o índice, poderíamos criá-lo assim:
db.employees.createIndex(
{
name: 1,
salary: -1
},
{
name: "employee_salary"
}
)
Tudo o que fizemos foi adicionar um
name
campo dentro de um documento opcional para fornecer opções para o índice. Se agora verificarmos o índice, podemos ver que ele tem o nome que fornecemos:
db.employees.getIndexes()
Resultado:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "name" : 1, "salary" : -1 }, "name" : "employee_salary" } ]
Incluindo o nome com outras opções
No exemplo anterior, o
name
campo é a única opção que fornecemos ao criar o índice. O nome não é a única opção que você pode especificar para um índice. Você também pode fornecer outras opções, como o idioma padrão, substituição de idioma, etc. Quaisquer outras opções precisarão ser incluídas no mesmo documento, separadas por uma vírgula.
Aqui está um exemplo de criação de um índice com duas outras opções (mas sem especificar o nome):
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish",
"language_override": "sprog"
}
)
Este é um índice diferente em uma coleção diferente da anterior. Mas você pode ver que especificamos nosso próprio
default_language
e um language_override
valores. É também um índice composto (é um índice que inclui vários campos). Eu não especifiquei um nome, então podemos ver quanto tempo o nome se torna com esse í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 } ]
Portanto, neste caso, o MongoDB deu ao índice um nome padrão de
original_name_text_translations.sitcom_name_text
, porque isso é derivado de nossa definição de índice. Precisaríamos usar o seguinte código para descartar esse índice por nome:
db.sitcoms.dropIndex("original_name_text_translations.sitcom_name_text")
Para incluir o nome em tal índice, podemos fornecê-lo no mesmo documento que usamos para especificar o idioma padrão e a substituição de idioma.
Então poderíamos criar o índice assim:
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish",
"language_override": "sprog",
"name": "sitcoms_da"
}
)
Neste caso usamos
sitcoms_da
como o nome do índice. Agora, quando obtemos uma lista de índices, podemos ver nosso nome 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 } ]