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"
	}
]
>