{ 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.