Capitolo 2

La Ricerca e gli Array


Capitolo 2: CRUD


Presentazione CRUD e Operatori
Insert: Aggiungere Documenti
Find e FindOne: Cercare i Documenti
Operatori $GT e $LT: Maggiore di e Minore di
Operatori $EXISTS, $TYPE e $REGEX
Combinare le Query con $AND e $OR
La Ricerca e gli Array
Operatori $ALL, $IN e $NIN
La Ricerca e i Sotto-Documenti
Limit, Sort, Skip e Count
Update: i Primi Due Approcci
Update e gli Array
Update: Upsert e Multi-Update
Remove e Drop: Eliminare i Documenti

La Ricerca e gli Array

Vediamo come interagire con gli array quando dobbiamo effettuare delle ricerche.

Ricerca su array

Sino ad ora abbiamo utilizzato documenti con strutture abbastanza semplici; proviamo qualcosa di leggermente più complicato, come ad esempio ad interagire con gli array.


Creiamo due articoli con diversi tags, per poter fare qualche prova di ricerca in entrambi inseriamo un tag comune che nel nostro sarà “query”.


Se l’attributo tags fosse stato una semplice stringa per cercarlo avremo potuto scrivere:

> db.articles.find( { tags:”array”  } )

però noi sappiamo che è un array, ma come avvertiamo Mongo? In realtà non serve, perchè è furbo e lo capisce da solo.

Anche le query si adattano al polimorfismo quindi, lanciando questa ricerca, Mongo analizzerà come al solito tutti i documenti: se troverà l’attributo tags come stringa verificherà se è uguale a quella cercata, se invece l’attributo da analizzare sarà un array controllerà tutti gli elementi dell’array per cercare una corrispondenza con la stringa, nel nostro caso la stringa “array”.

Proviamo.

Usiamo anche un altro tag.


Questo è un comportamento normalissimo per Mongo in quando è pensato per avere uno schema dinamico. La ricerca,però, non è ricorsiva e si ferma al primo livello di profondità dell’array, cioè se noi avessimo più array uno dentro l’altro Mongo effettuerebbe la ricerca solo nel primo livello.


Precisiamo che Mongo non offre nessun operatore per la ricerca ricorsiva oltre il primo livello di profondità e personalmente mi sembra del tutto logico per questioni legate alle performance.


Essendo una query completamente normale possiamo combinare anche altre condizioni, senza alcun tipo di problemi.