MongoDB - Indicizzazione
Gli indici supportano la risoluzione efficiente delle query. Senza indici, MongoDB deve scansionare ogni documento di una raccolta per selezionare quei documenti che corrispondono all'istruzione della query. Questa scansione è altamente inefficiente e richiede che MongoDB elabori un grande volume di dati.
Gli indici sono strutture di dati speciali, che memorizzano una piccola parte del set di dati in una forma facile da attraversare. L'indice memorizza il valore di un campo specifico o di un insieme di campi, ordinato in base al valore del campo come specificato nell'indice.
Il metodo createIndex ()
Per creare un indice, è necessario utilizzare il metodo createIndex () di MongoDB.
Sintassi
La sintassi di base di createIndex() metodo è il seguente ().
>db.COLLECTION_NAME.createIndex({KEY:1})
Qui la chiave è il nome del campo in cui si desidera creare l'indice e 1 è per l'ordine crescente. Per creare un indice in ordine decrescente è necessario utilizzare -1.
Esempio
>db.mycol.createIndex({"title":1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
>
In createIndex() metodo puoi passare più campi, per creare indice su più campi.
>db.mycol.createIndex({"title":1,"description":-1})
>
Questo metodo accetta anche un elenco di opzioni (che sono opzionali). Di seguito è riportato l'elenco:
Parametro | genere | Descrizione |
---|---|---|
sfondo | Booleano | Crea l'indice in background in modo che la creazione di un indice non blocchi altre attività del database. Specificare true per creare in background. Il valore predefinito èfalse. |
unico | Booleano | Crea un indice univoco in modo che la raccolta non accetti l'inserimento di documenti in cui la chiave o le chiavi dell'indice corrispondono a un valore esistente nell'indice. Specificare true per creare un indice univoco. Il valore predefinito èfalse. |
nome | corda | Il nome dell'indice. Se non specificato, MongoDB genera un nome di indice concatenando i nomi dei campi indicizzati e l'ordinamento. |
sparse | Booleano | Se true, l'indice fa riferimento solo ai documenti con il campo specificato. Questi indici utilizzano meno spazio ma si comportano in modo diverso in alcune situazioni (in particolare gli ordinamenti). Il valore predefinito èfalse. |
expireAfterSeconds | numero intero | Specifica un valore, in secondi, come TTL per controllare per quanto tempo MongoDB conserva i documenti in questa raccolta. |
pesi | documento | Il peso è un numero compreso tra 1 e 99.999 e denota la significatività del campo rispetto agli altri campi indicizzati in termini di punteggio. |
lingua di default | corda | Per un indice di testo, la lingua che determina l'elenco di parole non significative e le regole per stemmer e tokenizer. Il valore predefinito èEnglish. |
language_override | corda | Per un indice di testo, specificare il nome del campo nel documento che contiene, la lingua da sostituire alla lingua predefinita. Il valore predefinito è la lingua. |
Il metodo dropIndex ()
Puoi eliminare un particolare indice utilizzando il metodo dropIndex () di MongoDB.
Sintassi
La sintassi di base del metodo DropIndex () è la seguente ().
>db.COLLECTION_NAME.dropIndex({KEY:1})
Qui la chiave è il nome del file su cui si desidera creare l'indice e 1 è per l'ordine crescente. Per creare un indice in ordine decrescente è necessario utilizzare -1.
Esempio
> db.mycol.dropIndex({"title":1})
{
"ok" : 0,
"errmsg" : "can't find index with key: { title: 1.0 }",
"code" : 27,
"codeName" : "IndexNotFound"
}
Il metodo dropIndexes ()
Questo metodo elimina più indici (specificati) in una raccolta.
Sintassi
La sintassi di base del metodo DropIndexes () è la seguente () -
>db.COLLECTION_NAME.dropIndexes()
Esempio
Supponiamo di aver creato 2 indici nella raccolta mycol denominata come mostrato di seguito -
> db.mycol.createIndex({"title":1,"description":-1})
L'esempio seguente rimuove gli indici creati sopra di mycol -
>db.mycol.dropIndexes({"title":1,"description":-1})
{ "nIndexesWas" : 2, "ok" : 1 }
>
Il metodo getIndexes ()
Questo metodo restituisce la descrizione di tutti gli indici nella raccolta.
Sintassi
Di seguito è riportata la sintassi di base del metodo getIndexes ():
db.COLLECTION_NAME.getIndexes()
Esempio
Supponiamo di aver creato 2 indici nella raccolta mycol denominata come mostrato di seguito -
> db.mycol.createIndex({"title":1,"description":-1})
L'esempio seguente recupera tutti gli indici nella raccolta mycol -
> db.mycol.getIndexes()
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.mycol"
},
{
"v" : 2,
"key" : {
"title" : 1,
"description" : -1
},
"name" : "title_1_description_-1",
"ns" : "test.mycol"
}
]
>