4. DQL en NoSQL
En aquest apartat veurem les operacions de consulta (DQL) en MongoDB: l'operador find, les condicions i operadors disponibles, la projecció i l'ordenació.
4.1. L'operador FIND
Per realitzar consultes s'utilitza l'operador find. És important recordar que find busca DOCUMENTS, no subdocuments concrets.
La sintaxi:
| JavaScript | |
|---|---|
Característiques
- No hi ha cap filtre obligatori: si no posem res, obtindrem tots els documents de la col·lecció.
- Les condicions en Mongo s'utilitzen en moltes operacions (
find,aggregate,update, ...).
Exemple de find:

4.2. Condicions i operadors
Operadors de condició
$type: consulta per tipus de dada.$exists: consulta si el camp existeix.$regex: expressió regular a complir.$and,$nor,$or,$not: operadors booleans.$in,$nin: contingut en / no contingut en.$eq:truesi els valors són equivalents.$gt,$gte,$lt,$lte,$ne: major que, major o igual que, menor que, menor o igual que, distint.$where: satisfà una expressió en JavaScript.$all: arrays que compleixen tindre tots els elements.$elemMatch: especificacions a complir en arrays.$size: indica la grandària de l'array.
4.2.1. FIND $type
Com que en NoSQL podem tindre un camp que unes vegades tinga un tipus de dada i altres vegades un altre, pot interessar-nos traure aquells documents on un determinat camp tinga un tipus concret.
Exemple: en una base de dades de pel·lícules i comentaris, traure totes aquelles en què el títol és un string:
| JavaScript | |
|---|---|
4.2.2. FIND $exists
S'utilitza per traure aquells documents on existeix o no existeix el camp.
Per exemple, traure les pel·lícules on no apareixen actors:
| JavaScript | |
|---|---|
4.2.3. FIND $regex
Per utilitzar expressions regulars.
Per exemple, pel·lícules el títol de les quals comença per «The»:
| JavaScript | |
|---|---|
4.2.4. FIND $and
Serveix per afegir restriccions que s'han de complir totes. Es fa de forma implícita, per la qual cosa no és necessari utilitzar-lo.
Per exemple, pel·lícules que comencen per «The» i són espanyoles (countries és un array de països):
| JavaScript | |
|---|---|
Alerta
En el cas de fer la consulta sobre el mateix camp, unit amb $and SÍ que és necessari posar-lo.
Per exemple, pel·lícules que siguen d'Espanya i dels EUA:
| JavaScript | |
|---|---|
4.2.5. FIND $or
En aquest cas fa un or lògic i sí que és necessari posar-lo.
Per exemple, les pel·lícules que comencen per «El» o siguen espanyoles:
| JavaScript | |
|---|---|
4.2.6. FIND $not, $nor
$not és negar l'element, és a dir, el distint.
Per exemple, pel·lícules que no siguen espanyoles:
| JavaScript | |
|---|---|
$nor és negar les dues opcions, és a dir, ni això ni allò.
Per exemple, pel·lícules que no són ni espanyoles ni dels EUA:
| JavaScript | |
|---|---|
4.2.7. FIND $eq
S'utilitza com a operador d'igualtat. No sol utilitzar-se, però hi ha casos en què és necessari, com per exemple quan volem negar que siga espanyola:
| JavaScript | |
|---|---|
Altres operadors de comparació
$ne: distint de.$in: contingut en una llista de valors.$nin: no contingut en una llista de valors.$gt,$gte,$lt,$lte: major que, major o igual que, menor que, menor o igual que.
Exemple: pel·lícules amb més de 5 premis:
| JavaScript | |
|---|---|
4.2.8. Altres operadors
$where: permet utilitzar una expressió JavaScript com a filtre.$all: selecciona documents on l'array conté tots els elements indicats.$elemMatch: permet posar condicions sobre elements dins d'un array.$size: selecciona documents on l'array té una grandària concreta.
4.3. Projectar
Com en SQL, podem projectar i traure sols alguns elements o traure dades combinades. La sintaxi és la següent:
| JavaScript | |
|---|---|
- Es posen els camps a traure junt a un
1otrue. - Si posem un
0ofalse, el camp no apareix (també podem no posar-lo directament).
Alerta
El camp _id sempre apareix; per tant, en cas de no voler que aparega, hem de dir explícitament que no aparega.
| JavaScript | |
|---|---|
4.4. Ordenar
Ordena de forma ascendent (1) o descendent (-1):
| JavaScript | |
|---|---|
Per exemple, ordenar les pel·lícules espanyoles per número de premis de forma descendent:
| JavaScript | |
|---|---|