Come creare un indice univoco in MongoDB

Come Creare Un Indice Univoco In Mongodb



In MongoDB, un indice univoco garantisce che ogni valore in un particolare campo o gruppo di campi all'interno di una raccolta sia univoco. Utilizzando il metodo createIndex(), possiamo creare un campo indice univoco per la raccolta specifica. Allo scopo di mantenere l'integrità dei dati ed evitare voci duplicate nei campi vitali, sono utili gli indici univoci. L'articolo illustrava le modalità per creare un indice univoco per la raccolta specifica. db.candidates.insertMany([

{ nome: 'Alexa Bill' , voto: 'UN' , corso: 'pitone' },

{ nome: 'Jane Marks' , voto: 'B' , corso: 'Giava' },

{ nome: 'Paolo Ken' , voto: 'C' , corso: 'C#' },

{ nome: 'Emily Jeo' , voto: 'D' , corso: 'php' }

]);

Possiamo anche creare un campo indice univoco quando la collezione è presente con alcuni documenti al suo interno. Per questo inseriamo nella nuova collezione il documento che è “candidati” la cui query di inserimento è data come segue:







Esempio 1: creare un indice univoco di un singolo campo

Possiamo creare l'indice utilizzando il metodo createIndex() e possiamo rendere unico quel campo specificando l'opzione unique con il valore booleano “true”.



db.candidates.createIndex( { voto: 1 }, {unico: vero})

Qui, avviamo il metodo createIndex() sulla raccolta “candidates” per creare un indice univoco di un campo specifico. Quindi, forniamo al campo “voto” il valore “1” per la specifica dell’indice. Il valore '1' qui rappresenta l'indice ascendente della raccolta. Successivamente, specifichiamo l'opzione “unique” con il valore “true” per rafforzare l'unicità del campo “grade”.



L'output rappresenta che l'indice univoco nel campo 'voto' viene creato per la raccolta 'candidati':





Esempio 2: creare un indice univoco di più di un campo

Nell'esempio precedente viene creato un solo campo come indice univoco. Ma possiamo anche creare due campi come indice univoco contemporaneamente utilizzando il metodo createIndex().



db.candidates.createIndex( { voto: 1 , corso: 1 }, {unico: vero})

Qui chiamiamo il metodo createIndex() sulla stessa raccolta 'candidati'. Specifichiamo due campi nel metodo createIndex() – “grade” e “course” – con il valore “1” come prima espressione. Quindi, impostiamo l'opzione univoca con il valore 'vero' per creare questi due campi univoci.

L'output rappresenta due indici univoci, 'grade_1' e 'course_1', per la seguente raccolta 'candidati':

Esempio 3: creare un indice univoco composto dei campi

Tuttavia, possiamo anche creare contemporaneamente un indice composto univoco all'interno della stessa raccolta. Otteniamo ciò attraverso la seguente query:

db.candidates.createIndex( { nome: 1 , voto: 1 , corso: 1 }, {unico: vero}

Utilizziamo nuovamente il metodo createIndex() per creare l'indice univoco composto per la raccolta 'candidati'. Questa volta superiamo tre campi – “voto”, “nome” e “corso” – che fungono da campi dell’indice ascendente per la raccolta “candidati”. Successivamente, chiamiamo l'opzione 'unique' per rendere il campo univoco poiché 'true' viene assegnato a tale opzione.

L'output mostra i risultati che mostrano che tutti e tre i campi sono ora l'indice univoco della raccolta specificata:

Esempio 4: creare un indice univoco di valori di campo duplicati

Ora proviamo a creare l'indice univoco per il valore del campo duplicato che attiva un errore per mantenere il vincolo di unicità.

db.candidates.createIndex({nome: 1 },{univoco:vero})

Qui applichiamo i criteri dell'indice univoco per il campo che contiene valori simili. All'interno del metodo createIndex(), chiamiamo il campo “name” con il valore “1” per renderlo un indice univoco e definiamo l'opzione univoca con il valore “true”. Poiché i due documenti hanno il campo “nome” con valori identici, non possiamo rendere questo campo un indice univoco della raccolta “candidati”. L'errore di chiave duplicata viene attivato al momento dell'esecuzione della query.

Come previsto, l'output genera i risultati perché il campo nome ha gli stessi valori per due documenti diversi:

Pertanto, aggiorniamo la raccolta 'candidati' assegnando un valore univoco a ciascun campo 'nome' nel documento e quindi creiamo il campo 'nome' come indice univoco. L'esecuzione di tale query generalmente crea il campo 'nome' come indice univoco, come mostrato di seguito:

Esempio 5: creare un indice univoco di un campo mancante

In alternativa applichiamo il metodo createIndex() sul campo che non esiste in nessuno dei documenti della collection. Di conseguenza, l'indice memorizza un valore null rispetto a quel campo e l'operazione fallisce a causa di una violazione del valore del campo.

db.candidates.createIndex( { email: 1 }, {unico: vero})

Qui utilizziamo il metodo createIndex() in cui al campo 'email' viene fornito il valore '1'. Il campo 'email' non esiste nella raccolta 'candidati' e proviamo a renderlo un indice univoco per la raccolta 'candidati' impostando l'opzione univoca su 'vero'.

Quando la query viene eseguita, otteniamo l'errore nell'output poiché il campo 'email' manca nella raccolta 'candidates':

Esempio 6: creare un indice univoco di un campo con un'opzione sparsa

Successivamente, l'indice univoco può essere creato anche con l'opzione sparse. La funzionalità di un indice sparso è che include solo i documenti che hanno il campo indicizzato, escludendo i documenti che non hanno il campo indicizzato. Abbiamo fornito la seguente struttura per impostare l'opzione sparse:

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

{ nome: 'indice_corso_unique_sparso' , unico: vero, sparse: vero } )

Qui forniamo il metodo createIndex() in cui il campo 'corso' è impostato con il valore '1'. Successivamente, specifichiamo l'opzione aggiuntiva per impostare un campo indice univoco che è 'corso'. Le opzioni includono il 'nome' che imposta l'indice 'unique_sparse_course_index'. Quindi, abbiamo l'opzione “unique” che è specificata con il valore “true” e anche l'opzione “sparse” è impostata su “true”.

L'output crea un indice univoco e sparso sul campo 'corso' come mostrato di seguito:

Esempio 7: mostrare l'indice univoco creato utilizzando il metodo GetIndexes()

Nell'esempio precedente è stato creato solo un indice univoco per la raccolta fornita. Per visualizzare e ottenere informazioni sugli indici univoci per la raccolta “candidates”, utilizziamo il seguente metodo getIndexes():

db.candidates.getIndexes();

Qui chiamiamo la funzione getIndexes() sulla raccolta 'candidates'. La funzione getIndexes() restituisce tutti i campi indice per la raccolta “candidates” che abbiamo creato negli esempi precedenti.

L'output mostra l'indice univoco che abbiamo creato per la raccolta: un indice univoco, un indice composto o l'indice sparso univoco:

Conclusione

Abbiamo tentato di creare un indice univoco per i campi specifici della raccolta. Abbiamo esplorato i vari modi per creare un indice univoco per un singolo campo e più campi. Abbiamo anche tentato di creare un indice univoco in cui l'operazione fallisce a causa di una violazione del vincolo univoco.