100% au considerat acest document util (1 vot)
64 vizualizări14 pagini

MongoDB Sem2

Documentul prezintă etapele fluxului de agregare în MongoDB (aggregation framework). Sunt descrise operatorii $match, $group, $project, $sort și $count, precum și exemple de utilizare a acestora pentru a construi fluxuri de prelucrare a datelor.

Încărcat de

msardaru
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
100% au considerat acest document util (1 vot)
64 vizualizări14 pagini

MongoDB Sem2

Documentul prezintă etapele fluxului de agregare în MongoDB (aggregation framework). Sunt descrise operatorii $match, $group, $project, $sort și $count, precum și exemple de utilizare a acestora pentru a construi fluxuri de prelucrare a datelor.

Încărcat de

msardaru
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

Programul de masterat: BAZE DE DATE – SUPORT PENTRU AFACERI

Disciplina: Baze de date NoSQL


________________________________________________________________________________________________

- SEMINARUL 2 -
Aggregation framework

Aggregation framework definește un proces care manipulează documentele în diferite etape


(stages), le prelucrează în conformitate cu criteriile furnizate și apoi returnează rezultatele.
Procesul de prelucrare al MongoDB este modelat sub forma unui flux de tip pipeline
implementat prin metoda aggregate() în care o listă de operatori / condiții sunt aplicate datelor.

[Link]( [ { <stage1> }, { <stage2> },... ] )

• procesul de agregare se poate constitui din mai multe etape, denumite stages;
• procesul începe cu introducerea tuturor documentelor din cadrul colecției în prima etapă;
• documentele obținute în fiecare etapă devin input pentru etapa următoare;
• fiecare etapă transformă documentele pe măsură ce trec prin fluxul de prelucrare;
• etapele nu trebuie să producă un document de ieșire pentru fiecare document de intrare; de
exemplu, unele etape pot genera documente noi (de exemplu: $group), iar altele pot filtra
documente inițiale (de exemplu: $match).
• o etapă poate apărea de mai multe ori în flux, aceasta fiind repetată pentru a filtra documentele în
continuare.
Manualul de referință MongoDB prezintă detaliat etapele care pot apărea într-un flux de
agregare: [Link]
pipeline-operator-reference

Un flux de prelucrare a datelor poate fi reprezentat astfel:.

-1-
Programul de masterat: BAZE DE DATE – SUPORT PENTRU AFACERI
Disciplina: Baze de date NoSQL
________________________________________________________________________________________________

Principalele etape ale fluxului de prelucrare

Etapele fluxului de prelucrare se specifică utilizându-se sintaxa:


{ $<stage> : { } }

Expresii de agregare: referințe la numele câmpurilor din documentele de intrare în diferite etape. Se
indică prin "$denumireCamp", denumirea câmpului fiind delimitată prin includere între " "

Exemple de utilizare:
{$match: {salariul: {$gt: 2500}}}
{$group: {_id: "$salariul"}}
{$sort: {nume: -1}}

$match
• utilizează interogările MongoDB standard în scopul filtrării documentelor
• nu efectuează modificări asupra structurii documentelor care vor fi returnate
• numai acele documente care îndeplinesc condițiile indicate explicit vor trece către următoarea
etapă din flux
• se recomandă ca etapa $match să fie utilizată cât mai devreme în fluxul de prelucrare, astfel
încât să se limiteze numărul documentelor care vor fi transmise următoarelor etape
• sintaxa generală este:
{$match: { <conditii>}}}

Ex. 1. Se returnează documentele care îndeplinesc condițiile de filtrare asupra câmpurilor salariul și
departament:

-2-
Programul de masterat: BAZE DE DATE – SUPORT PENTRU AFACERI
Disciplina: Baze de date NoSQL
________________________________________________________________________________________________

$addFields
• adaugă câmpuri noi documentelor
• se utilizează în vederea determinării unor valori calculate
• produce modificări asupra structurii documentelor care vor fi returnate

Ex. 2. Se returnează toate documentele colecției, adăugându-se fiecăruia un nou câmp calculat pe
baza celor existente

$group
• permite gruparea datelor în funcție de anumite criterii
• fiecare grup distinct format va fi transmis către următoarea etapă sub forma unui document cu
un identificator unic (_id)
• sintaxa generală este:
{$group: {_id:<expresie>, <câmp>: {<[Link]>: <expresie>}}}

• operatorii de grupare sunt: $sum, $avg, $max, $min, $push

Exemple de utilizare:
{$group: {_id: "$departament"}}
{$group: {_id: {departament: "$departament",
functie: "$functie"}}

Ex. 3. Se efectuează o grupare a documentelor inițiale în funcție de valoarea câmpului departament


și se returnează documente noi, corespunzătoare fiecărui grup

-3-
Programul de masterat: BAZE DE DATE – SUPORT PENTRU AFACERI
Disciplina: Baze de date NoSQL
________________________________________________________________________________________________

Ex. 4. Se efectuează o grupare a documentelor inițiale în funcție de departament și oraș și se


returnează documente noi, corespunzătoare fiecărui grup

Ex. 5. Se construiește un flux de prelucrări prin care:


− $match: se efectuează o filtrare a datelor în funcție de oraș
− $group: se efectuează o grupare a documentelor obținute din etapa anterioară în funcție de
departament și oraș și se returnează documente noi, corespunzătoare fiecărui grup

-4-
Programul de masterat: BAZE DE DATE – SUPORT PENTRU AFACERI
Disciplina: Baze de date NoSQL
________________________________________________________________________________________________

Ex. 6. Se construiește un flux de prelucrări prin care:


− $group: se efectuează o grupare a tuturor documentelor colecției în funcție de departament și
oraș și se returnează documente noi, corespunzătoare fiecărui grup
− $match: se efectuează o filtrare a documentelor obținute din etapa anterioară în funcție de oraș

-5-
Programul de masterat: BAZE DE DATE – SUPORT PENTRU AFACERI
Disciplina: Baze de date NoSQL
________________________________________________________________________________________________

$project
• documentelor intrate în această etapă le este modificată structura, în funcție de proiecția dorită
• sintaxa generală este:
{$project: {<camp>: <1|0>, <campNou>: <expresie>}}

• un câmp descris cu valoarea 1 sau true va apărea în documentele rezultate


• omiterea _id din lista specificațiilor va conduce la afișarea implicită a acestuia
• excluderea _id din documentele rezultate se va exprima prin valoare 0 sau false
• pot fi adăugate câmpuri noi sau pot fi redenumite unele existente prin indicarea unor valori
sau a unor expresii

Ex. 7. Se construiește un flux de prelucrări prin care:


− $match: se efectuează o filtrare a datelor în funcție de nume
− $project: se efectuează o proiecție asupra documentelor obținute din etapa anterioară și se
returnează documente noi, având ca și câmpuri numai nume și prenume

Ex. 8. Se construiește un flux de prelucrări prin care:


− $match: se efectuează o filtrare a datelor în funcție de salariu
− $project: se efectuează o proiecție asupra documentelor obținute din etapa anterioară și se
returnează documente noi, având ca și câmpuri nume, prenume și infoDepartament (construit în
urma unei restructurări a informațiilor din câmpurile existente)

-6-
Programul de masterat: BAZE DE DATE – SUPORT PENTRU AFACERI
Disciplina: Baze de date NoSQL
________________________________________________________________________________________________

$sort
• aranjează documentele returnate în funcție de sensul indicat prin cheia de sortare
• etapa nu produce modificări în documente, ci doar le schimbă ordinea de returnare
• în cazul în care cheia de sortare are valoarea 1, ordonarea se va efectua ascendent
• în cazul în care cheia de sortare are valoarea -1, ordonarea se va efectua descendent
• sintaxa generală este:
{$sort: {<camp>: <-1|1>,...}}

Ex. 9. Se construiește un flux de prelucrări prin care:


− $match: se efectuează o filtrare a datelor în funcție de salariu
− $sort: se efectuează o sortare asupra documentelor obținute din etapa anterioară și se returnează
documente noi, având efectuată sortare după nume

-7-
Programul de masterat: BAZE DE DATE – SUPORT PENTRU AFACERI
Disciplina: Baze de date NoSQL
________________________________________________________________________________________________

$count
• întoarce numărul de documente obținute din etapa anterioară
• se numără printre ultimele etape din flux
• sintaxa generală este:
{$count: "<denumire>"}

Ex. 10. Se construiește un flux de prelucrări prin care:


− $match: se efectuează o filtrare a datelor în funcție de oras
− $count: se efectuează o agregare și se returnează un document nou care conține un singur câmp,
calculat prin numărarea documentelor obținute din etapa anterioară

-8-
Programul de masterat: BAZE DE DATE – SUPORT PENTRU AFACERI
Disciplina: Baze de date NoSQL
________________________________________________________________________________________________

Ex. 11. Se construiește un flux de prelucrări prin care:


− $group: se efectuează o grupare a tuturor documentelor colecției în funcție de departament și
oraș și se returnează documente noi, corespunzătoare fiecărui grup
− $count: se efectuează o agregare și se returnează un document nou care conține un singur câmp,
calculat prin numărarea documentelor obținute din etapa anterioară

Ex. 12. Se construiește un flux de prelucrări prin care:


− $match: se efectuează o filtrare a datelor în funcție de salariul
− $group: se efectuează o grupare a tuturor documentelor colecției în funcție de departament și se
returnează documente noi, corespunzătoare fiecărui grup
− $count: se efectuează o agregare și se returnează un document nou care conține un singur câmp,
calculat prin numărarea documentelor obținute din etapa anterioară

$unwind
• utilizarea de câmpuri cu valori dintr-un vector poate conduce la necesitatea prelucrărilor
individuale ale acestora, ca elemente componente
• fiecare document de ieșire are aceeași structură ca și cel de intrare, dar valoarea vectorului
este înlocuită prin elementele componente

-9-
Programul de masterat: BAZE DE DATE – SUPORT PENTRU AFACERI
Disciplina: Baze de date NoSQL
________________________________________________________________________________________________

• sintaxa generală este:


{$unwind: < denumireCampVector >}

Ex. 13. Se construiește un flux de prelucrări prin care:


− $unwind: se construiesc documente noi, prin descompunerea vectorului care conține
competențele
− $project: se solicită afișarea doar pentru anumite câmpuri din documentele obținute în etapa
anterioară

Ex. 14. Se construiește un flux de prelucrări prin care:


− $unwind: se construiesc documente noi, prin descompunerea vectorului care conține
competențele
− $group: se efectuează o grupare a documentelor obținute din etapa anterioară, în funcție de
competente și se returnează documente noi, corespunzătoare fiecărui grup

- 10 -
Programul de masterat: BAZE DE DATE – SUPORT PENTRU AFACERI
Disciplina: Baze de date NoSQL
________________________________________________________________________________________________

$out
• salvează documentele rezultate în urma procesului de prelucrare într-o colecție nouă
• atunci când se utilizează este întotdeauna ultima etapă din flux

Ex. 15. Se construiește un flux de prelucrări prin care:


− $group: se efectuează o grupare a tuturor documentelor colecției în funcție de departament, se
calculează salariul mediu și se returnează documente noi, corespunzătoare fiecărui grup
− $out: se salvează într-o colecție nouă documentele obținute din etapa anterioară

- 11 -
Programul de masterat: BAZE DE DATE – SUPORT PENTRU AFACERI
Disciplina: Baze de date NoSQL
________________________________________________________________________________________________

Operatorii de grupare (accumulator operators)

Operatorii de grupare se specifică utilizându-se sintaxa:


{$operatorGrupare: <expresie>}

Exemple de utilizare:
{total: {$sum: "$salariul"}}
{numar: {$sum: 1}}

$sum
• returnează suma valorilor numerice, ignorându-le pe cele nenumerice
• cel mai des este utilizată în etapa $group, dar poate fi folosită și în etapa $project
• utilizată în etapa $group, va returna suma tuturor valorilor numerice asociate unei chei
indicate la nivelul fiecărui grup
• utilizată în etapa $project, va produce un nou câmp cu valoarea obținută ca sumă a valorilor
expresiilor indicate
• sintaxa generală este:
{$sum: <expresie> }

Ex. 16. Se efectuează o grupare a tuturor documentelor colecției în funcție de departament, se


calculează numărul de angajați (contorizând fiecare document) și se returnează documente noi,
corespunzătoare fiecărui grup

$avg
• returnează media valorilor numerice, ignorându-le pe cele nenumerice
• cel mai des este utilizată în etapa $group

- 12 -
Programul de masterat: BAZE DE DATE – SUPORT PENTRU AFACERI
Disciplina: Baze de date NoSQL
________________________________________________________________________________________________

• utilizată în etapa $group, va returna media tuturor valorilor numerice asociate unei chei
indicate la nivelul fiecărui grup
• sintaxa generală este:
{$avg: < expresie > }

$max and $min


• returnează valorile maximă, respectiv minimă, dintr-un vector
• returnează 0 pentru câmpuri care nu există
• cel mai des sunt utilizate în etapa $group
• utilizate în etapa $group, vor returna maximul, respectiv minimul tuturor valorilor numerice
asociate unei chei indicate la nivelul fiecărui grup
• sintaxa generală este:
{$max: < expresie > } / {$min: < expresie > }

Ex. 17. Se efectuează o grupare a tuturor documentelor colecției în funcție de departament, se


calculează salariile total, mediu, minim și maxim și se returnează documente noi, corespunzătoare
fiecărui grup

$push
• returnează un vector conținând valori ale expresiei indicate
• poate apărea doar în etapa $group
• sintaxa generală este:
{$push: < expresie > }

- 13 -
Programul de masterat: BAZE DE DATE – SUPORT PENTRU AFACERI
Disciplina: Baze de date NoSQL
________________________________________________________________________________________________

Ex. 18. Se efectuează o grupare a tuturor documentelor colecției în funcție de departament, indicând
pentru fiecare grup și lista numelor angajaților (sub formă de vector)

Comparație a termenilor SQL-MongoDB


SQL MongoDB

SELECT $project

WHERE/HAVING $match

JOIN $lookup

LIMIT $limit

GROUP BY $group

ORDER BY $sort

COUNT() $sum

SUM() $sum

AVG() $avg

- 14 -

S-ar putea să vă placă și