2. Bases de dades NoSQL

2.6. Buscar documents

Primer comptarem quants documents té la col·lecció chr1 amb la instrucció

db.chr1.find().count();

Aquesta instrucció conté dues funcions. La funció find() que és la funció que utilitzem per realitzar recerques en la col·lecció de documents. Seria la instrucció SELECT que hem vist a MySQL. Si no hi afegim paràmetres ens mostrarà tots els documents de la col·lecció, si hi afegim paràmetres, aquests seran els criteris de recerca o els filtres de la selecció. En aquest cas complementem la funció find() amb la funció count() per comptar els documents trobats. La funció count() no requereix paràmetres, però cal escriure els parèntesis igualment.

Figura 79. Comptar tots els documents d’una col·lecció.
Font: elaboració pròpia.

En executar la instrucció db.chr1.find().count(); el sistema ens en retorna 3. La col·lecció chr1 té 3 documents.

Utilitzarem la instrucció db.chr1.find(); per veure tots els documents:

Figura 80. Mostrar la informació de tots els documents d’una col·lecció.
Font: elaboració pròpia.

Per a cada document el sistema ens mostra el camp _id amb un valor generat aleatòriament per la funció del sistema ObjectId();

En el camp _id es guarda la clau primària del document. Aquesta clau primària és tan important per al sistema que si el document que inserim no té el camp _id el sistema el crea de forma automàtica. En els nostres exemples els tres documents inserits no tenen el camp _id i el sistema l’ha generat automàticament.

En un document hi pot haver molts camps i, tal com els mostra la funció find(); , queden poc llegibles. Perquè el document es pugui llegir millor, la funció find(); es pot complementar amb la funció pretty();

db.chr1.find().pretty();
Figura 81. Mostrar la informació de tots els documents d’una col·lecció amb un format més llegible.
Font: elaboració pròpia.

Com podem observar, la funció pretty(); ens permet veure els valors de cada camp de cada document d’una forma molt més amigable.

Vegem ara alguns exemples d’utilització de la funció find() amb alguns paràmetres per filtrar els resultats.

Mostrarem només els gens de la nostra col·lecció que es troben en la cadena +:

db.chr1.find({"strand": "+"}).pretty();
Figura 82. Mostrar la informació dels gens de la cadena +.
Font: elaboració pròpia.

El paràmetre de la funció és la condició de selecció de la recerca {"strand": "+"}

Si no volem mostrar algun camp, com per exemple el camp _id, escrivim

db.chr1.find({"strand": "+"}, {"_id":0}).pretty();

Figura 83. Mostrar la informació dels gens de la cadena + sense el camp _id.
Font: elaboració pròpia.

Si volem mostrar un sol camp dels documents seleccionats, com per exemple el camp name, escrivim

db.chr1.find({"strand": "+"},{"name":1, "_id":0 }).pretty();
Figura 84. Mostrar els gens de la cadena + sense mostrar el camp _id i mostrar el camp name.
Font: elaboració pròpia.

Les consultes amb la funció find() poden ser molt més elaborades, usant diversos camps com a condició de recerca, o també usant operadors especials com major que, menor que, etc.