Como criar um índice exclusivo no MongoDB

Como Criar Um Indice Exclusivo No Mongodb



No MongoDB, um índice exclusivo garante que cada valor em um determinado campo ou grupo de campos dentro de uma coleção seja único. Usando o método createIndex(), podemos criar um campo de índice exclusivo para a coleção específica. Para manter a integridade dos dados e evitar entradas duplicadas em campos vitais, índices exclusivos são úteis. O artigo abordou as maneiras de criar um índice exclusivo para uma coleção específica. db.candidates.insertMany([

{ nome: 'Alexa Bill' , nota: 'A' , curso: 'Pitão' },

{ nome: 'Jane Marcas' , nota: 'B' , curso: 'Java' },

{ nome: 'Paulo Ken' , nota: 'C' , curso: 'C#' },

{ nome: 'Emily Jeo' , nota: 'D' , curso: 'php' }

]);

Também podemos criar um campo de índice exclusivo quando a coleção estiver presente com alguns documentos dentro dela. Para isso inserimos o documento na nova coleção que é “candidatos” cuja consulta para inserção se dá da seguinte forma:







Exemplo 1: Crie um índice exclusivo de um único campo

Podemos criar o índice usando o método createIndex() e podemos tornar esse campo único especificando a opção única com o booleano “true”.



db.candidates.createIndex({nota: 1 }, { único: verdadeiro } )

Aqui, iniciamos o método createIndex() na coleção “candidatos” para criar um índice exclusivo de um campo específico. Em seguida, fornecemos ao campo “nota” o valor “1” para a especificação do índice. O valor “1” aqui representa o índice ascendente da coleção. A seguir, especificamos a opção “unique” com o valor “true” para reforçar a exclusividade do campo “nota”.



A saída representa que o índice exclusivo no campo “nota” é criado para a coleção “candidatos”:





Exemplo 2: Crie um índice exclusivo de mais de um campo

No exemplo anterior, apenas um único campo é criado como um índice exclusivo. Mas também podemos criar dois campos como um índice único simultaneamente usando o método createIndex().



db.candidates.createIndex({nota: 1 , curso: 1 }, { único: verdadeiro } )

Aqui, chamamos o método createIndex() na mesma coleção de “candidatos”. Especificamos dois campos para o método createIndex() – “nota” e “curso” – com o valor “1” como a primeira expressão. Em seguida, definimos a opção exclusiva com o valor “true” para criar esses dois campos exclusivos.

A saída representa dois índices exclusivos, “nota_1” e “curso_1”, para a seguinte coleção de “candidatos”:

Exemplo 3: Crie um índice exclusivo composto dos campos

No entanto, também podemos criar um índice composto exclusivo dentro da mesma coleção simultaneamente. Conseguimos isso por meio da seguinte consulta:

db.candidates.createIndex({ nome: 1 , nota: 1 , curso: 1 }, {único: verdadeiro}

Usamos o método createIndex() novamente para criar o índice exclusivo composto para a coleção “candidatos”. Desta vez, passamos três campos – “nota”, “nome” e “curso” – que atuam como campos de índice ascendente para a coleção “candidatos”. A seguir, chamamos a opção “unique” para tornar o campo único, já que “true” é atribuído a essa opção.

A saída exibe os resultados que mostram que todos os três campos são agora o índice exclusivo da coleção especificada:

Exemplo 4: Crie um índice exclusivo de valores de campo duplicados

Agora, tentamos criar um índice exclusivo para o valor do campo duplicado, o que aciona um erro para manter a restrição de exclusividade.

db.candidates.createIndex({nome: 1 },{único:verdadeiro})

Aqui, aplicamos os critérios de índice exclusivos para o campo que contém valores semelhantes. Dentro do método createIndex(), chamamos o campo “nome” com o valor “1” para torná-lo um índice único e definimos a opção única com o valor “verdadeiro”. Como os dois documentos possuem o campo “nome” com valores idênticos, não podemos tornar este campo um índice único da coleção “candidatos”. O erro de chave duplicada é acionado na execução da consulta.

Conforme esperado, a saída gera os resultados porque o campo nome possui os mesmos valores para dois documentos diferentes:

Assim, atualizamos a coleção “candidatos” atribuindo um valor único a cada campo “nome” do documento e então criamos o campo “nome” como índice exclusivo. A execução dessa consulta geralmente cria o campo “nome” como o índice exclusivo, conforme mostrado a seguir:

Exemplo 5: Crie um índice exclusivo de um campo ausente

Alternativamente, aplicamos o método createIndex() no campo que não existe em nenhum dos documentos da coleção. Como resultado, o índice armazena um valor nulo nesse campo e a operação falha devido a uma violação do valor do campo.

db.candidates.createIndex({e-mail: 1 }, { único: verdadeiro } )

Aqui, empregamos o método createIndex() onde o campo “email” é fornecido com o valor “1”. O campo “email” não existe na coleção “candidatos” e tentamos torná-lo um índice único para a coleção “candidatos” definindo a opção exclusiva como “true”.

Quando a consulta para isso é executada, obtemos o erro na saída porque o campo “email” está faltando na coleção “candidatos”:

Exemplo 6: Crie um índice exclusivo de um campo com uma opção esparsa

A seguir, o índice exclusivo também pode ser criado com a opção esparsa. A funcionalidade de um índice esparso é que ele inclui apenas documentos que possuem o campo indexado, excluindo os documentos que não possuem o campo indexado. Fornecemos a seguinte estrutura para configurar a opção esparsa:

db.candidates.createIndex({curso: 1 },

{ nome: 'unique_sparse_course_index' , único: verdadeiro, esparso: verdadeiro } )

Aqui, fornecemos o método createIndex() onde o campo “curso” é definido com o valor “1”. Depois disso, especificamos a opção adicional para definir um campo de índice exclusivo que é “curso”. As opções incluem o “nome” que define o índice “unique_sparse_course_index”. Então, temos a opção “unique” que é especificada com o valor “true” e a opção “sparse” também é definida como “true”.

A saída cria um índice exclusivo e esparso no campo “curso”, conforme mostrado a seguir:

Exemplo 7: Mostre o índice exclusivo criado usando o método GetIndexes()

No exemplo anterior, apenas um índice exclusivo foi criado para a coleção fornecida. Para visualizar e obter informações sobre os índices exclusivos da coleção “candidatos”, usamos o seguinte método getIndexes():

db.candidatos.getIndexes();

Aqui, chamamos a função getIndexes() na coleção “candidatos”. A função getIndexes() retorna todos os campos de índice da coleção “candidatos” que criamos nos exemplos anteriores.

A saída exibe o índice exclusivo que criamos para a coleção: um índice exclusivo, um índice composto ou o índice esparso exclusivo:

Conclusão

Tentamos criar um índice exclusivo para os campos específicos da coleção. Exploramos as várias maneiras de criar um índice exclusivo para um único campo e vários campos. Também tentamos criar um índice exclusivo onde a operação falha devido a uma violação de restrição exclusiva.