Latest web development tutorials

MongoDB indicizzazione avanzata

Si consideri il seguente documento collezioni (utenti):

{
   "address": {
      "city": "Los Angeles",
      "state": "California",
      "pincode": "123"
   },
   "tags": [
      "music",
      "cricket",
      "blogs"
   ],
   "name": "Tom Benzamin"
}

Il documento di cui sopra contiene sotto-documenti, e affrontare una serie di tag.


campo array indicizzato

Supponiamo di recuperare etichetta user-based, per cui abbiamo bisogno di indicizzare le variabili array di raccolta.

Creare un indice nella matrice, la matrice delle esigenze di ogni campo, a sua volta indicizzato. Così, quando si crea un indice per le variabili array, fornirà musica, grillo, blog tre valori di stabilire un indice separato.

Creare un indice di array, utilizzare il seguente comando:

>db.users.ensureIndex({"tags":1})

Dopo aver creato l'indice, siamo in grado di recuperare l'insieme tags campo:

>db.users.find({tags:"cricket"})

Abbiamo usato per verificare l'utilizzo dell'indice, è possibile utilizzare il comando spiegare:

>db.users.find({tags:"cricket"}).explain()

I risultati del comando di cui sopra mostrerà "cursore": "BtreeCursor tags_1", ha detto l'indice è stato utilizzato.


Indice campo sub-documento

Supponiamo di bisogno città, stato, codice PIN campo per recuperare i documenti, in quanto questi campi sono campi documento secondario, quindi abbiamo bisogno di una indicizzazione documento secondario.

Creare un indice per i tre sotto-settori del documento, il comando è il seguente:

>db.users.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})

Una volta creato l'indice, possiamo utilizzare il campo per recuperare i sotto-documenti con dati:

>db.users.find({"address.city":"Los Angeles"})   

Ricordate espressione di query deve seguire l'ordine dell'indice specificato. Così l'indice creato in precedenza sosterrà la seguente query:

>db.users.find({"address.city":"Los Angeles","address.state":"California"}) 

Supporta anche la seguente query:

>db.users.find({"address.city":"LosAngeles","address.state":"California","address.pincode":"123"})