Capitolo 2

Operatori $GT e $LT: Maggiore di e Minore di


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

Operatori $GT e $LT: Maggiore di e Minore di

Vediamo finalmente i nostri primi operatori, $gt e $lt, come si applicato e le loro potenzialità.

Lezione sugli operatori $gt e $lt

Solitamente su Mongo gli operatori hanno tutti la stessa struttura, ad eccezione di AND e OR che vedremo più avanti, una volta capita la logica applicare gli operatori ci verrà naturale. $gt e $lt sono i primi operatori che vediamo.

Non sono due strane sigle, gt vuol dire greater than, ovvero maggiore di, mentre lt vuol dire lower than quindi meno di, vediamoli nella pratica:


> db.scores.find( { score: { $gt:95 } } )


Specifichiamo prima l’attributo al quale voler applicare l’operatore, poi apriamo un sottodocumento in cui inseriamo l’operatore come coppia chiave-valore. In questo caso cercherà tutti i documenti che hanno un punteggio maggiore di 95.


Possiamo anche aggiungere anche altre condizioni, ad esempio vogliamo vedere solo le prove, quindi scriviamo:

> db.scores.find( { score: { $gt:95 }, type:”prova” } )


L’operatore $lt funziona in modo analogo, solo che restituirà i documenti con un punteggio minore del valore specificato.

Proviamo invece a considerare un intervallo, ad esempio tutte le prove maggiori di 95 e minori di 98. Dobbiamo usare entrambi gli operatori sullo stesso attributo “score” quindi possiamo semplicemente aggiungere $lt nel sottodocumento in cui è presente l’operatore $gt, in questo modo:

> db.scores.find( { score: { $gt:95, $lt:98 }, type:”prova” } )


Gli operatori semplici $gt e $lt non considerano gli estremi dell’intervallo, se vogliamo gli estremi inclusi ci basterà aggiungere la e di equal, uguale, quindi $gte e $lte.


Abbiamo visto come utilizzare gli operatori con i numeri, e con le stringhe si può fare? in realtà si anche se non è proprio raccomandato, facciamo qualche prova nella collection users. Prima però aggiungiamo qualche utente che ci servirà per le prove. Ora che li abbiamo aggiunti proviamo a fare una ricerca:


>db.users.find( { name: { $lt: “D” } } )

>db.users.find( { name: { $lt: “D”, $gt: “B” } } )


Notate qualcosa di strano? Qualcosa di insolito?
Magari a qualcuno potrebbe sembrare strano che visualizzi Bob dato che abbiamo scritto $gt e non $gte, giusto?

Adesso vi spiego il perchè, quando usiamo gli operatori su delle stringhe Mongo utilizza l’ordinamento in base alla rappresentazione dei byte dell’UTF-8. Quindi ci visualizza anche Bob perchè Bob è a tutti gli effetti considerato maggiore della lettera B. Se al posto di B scrivessimo Bob vedreste che viene escluso, a meno che non inseriate anche l’uguale nell’operatore gt, ma questa prova la lascio fare a voi così fate pratica.


MongoDB ha uno schema dinamico quindi possiamo aggiungere nell’attributo name, che attualmente contiene solo stringhe, anche dei numeri ad esempio:


>db.users.insert( { name: 20 } )


Possiamo comunque effettuare le nostre query senza intralci, dato che quando usiamo $gt ed $lt precisiamo la lettera iniziale come stringa.