Agregarea grupului MongoDB

Agregarea Grupului Mongodb



Agregarea este procedura de extragere a datelor dintr-o colecție MongoDB. Prelucrează numeroase documente și oferă rezultate estimate. Agregarea din MongoDB are mai mulți operatori și metode care efectuează diverse sarcini. Printre acești operatori, operatorul $group grupează documentele pentru fiecare grupare unică și le aranjează conform unei expresii care este definită. Operatorul de grup este semnificativ în MongoDB, deoarece facilitează o gamă largă de manipulări de date. Agregarea $group din exemplul MongoDB împreună cu diferiți acumulatori este furnizată mai jos.

Cum funcționează agregarea de grup în MongoDB?

Operatorul $group ar trebui folosit pentru a grupa documentele de intrare în funcție de expresia _id specificată. Ar trebui apoi să returneze un singur document cu valorile totale pentru fiecare grup separat. Pentru a începe cu implementarea, am creat colecția „Cărți” în MongoDB. După crearea colecției „Cărți”, am introdus documentele care sunt asociate diferitelor câmpuri. Documentele sunt inserate în colecție prin metoda insertMany() deoarece interogarea care trebuie executată este prezentată mai jos.

>db.Books.insertMany([

{
_id:1,
titlu: „Anna Karenina”,
pret: 290,
Anul: 1879,
order_status: „În stoc”,
autor: {
'name':'Leo Tolstoi'
}
},
{
_id:2,
titlu: „To Kill a Mockingbird”,
pret: 500,
anul: 1960,
order_status: „stoc epuizat”,
autor: {
'name':'Harper Lee'
}
},
{
_id:3,
titlu: „Omul invizibil”,
pret: 312,
Anul: 1953,
order_status: „În stoc”,
autor: {
'name':'Ralph Ellison'
}
},
{
_id:4,
titlu: „Iubit”,
pret: 370,
anul: 1873,
order_status: „epuizat_stoc”,
autor: {
'name':'Toni Morrison'
}
},
{
_id:5,
titlu: „Lucrurile se destramă”,
pret: 200,
anul: 1958,
order_status: „În stoc”,
autor: {
'name':'Chinua Achebe'
}
},
{
_id:6,
titlu: „The Color Purple”,
pret: 510,
anul: 1982,
order_status: „stoc epuizat”,
autor: {
'name':'Alice Walker'
}
}
])

Documentele sunt stocate cu succes în colecția „Cărți” fără a întâmpina nicio eroare, deoarece rezultatul este recunoscut ca „adevărat”. Acum, vom folosi aceste documente ale colecției „Cărți” pentru a realiza agregarea „$group”.









Exemplul # 1: Utilizarea agregarii $group



Utilizarea simplă a agregării $group este demonstrată aici. Interogarea agregată introduce mai întâi operatorul „$group”, apoi operatorul „$group” preia în continuare expresiile pentru a genera documentele grupate.





>db.Books.aggregate([

{ $group:{ _id:'$author.name'} }

])

Interogarea de mai sus a operatorului $group este specificată cu câmpul „_id” pentru a calcula valorile totale pentru toate documentele de intrare. Apoi, câmpul „_id” este alocat cu „$author.name” care formează un grup diferit în câmpul „_id”. Valorile separate ale lui $author.name vor fi returnate deoarece nu calculăm nicio valoare acumulată. Execuția interogării agregate $group are următorul rezultat. Câmpul _id are valori ale autorului.nume.



Exemplul # 2: Utilizarea agregarii $group cu acumulatorul $push

Exemplul de agregare $group folosește orice acumulator care este deja menționat mai sus. Dar putem folosi acumulatorii în agregarea $group. Operatorii de acumulator sunt cei care sunt utilizați în câmpurile documentului de intrare, altele decât cele care sunt „grupate” sub „_id”. Să presupunem că dorim să împingem câmpurile expresiei într-o matrice, apoi acumulatorul „$push” este numit în operatorul „$group”. Exemplul vă va ajuta să înțelegeți mai clar acumulatorul „$push” al „$grup”.

>db.Books.aggregate(

[

{ $grup : { _id : „$_id”, anul: { $push: „$an” } } }

]

).frumos();

Aici, dorim să grupăm în matrice data anului publicat a cărților date. Interogarea de mai sus ar trebui aplicată pentru a realiza acest lucru. Interogarea de agregare este furnizată cu expresia în care operatorul „$group” ia expresia câmpului „_id” și expresia câmpului „year” pentru a obține anul grupului folosind acumulatorul $push. Ieșirea extrasă din această interogare specifică creează o matrice de câmpuri de an și stochează documentul grupat returnat în interiorul acestuia.

Exemplul # 3: Utilizarea agregarii $group cu acumulatorul „$min”.

În continuare, avem acumulatorul „$min” care este utilizat în agregarea $group pentru a obține valoarea minimă de potrivire din fiecare document din colecție. Expresia de interogare pentru acumulatorul $min este dată mai jos.

>db.Books.aggregate([

{
$grup:{
_id:{
titlu: „$title”,
order_status: „$order_status”
},
minPrice:{$min: '$price'}
}
}
])

Interogarea are expresia de agregare „$group” unde am grupat documentul pentru câmpurile „title” și „order_status”. Apoi, am furnizat acumulatorul $min care a grupat documentele obținând valorile prețului minim din câmpurile negrupate. Când rulăm această interogare a acumulatorului $min de mai jos, returnează documentele grupate după titlu și status_ordine într-o secvență. Prețul minim apare primul, iar prețul cel mai mare al documentului este plasat ultimul.

Exemplul # 4: Utilizați agregarea $group cu acumulatorul $sum

Pentru a obține suma tuturor câmpurilor numerice folosind operatorul $group, este implementată operația $sum acumulator. Valorile nenumerice din colecții sunt considerate de acest acumulator. În plus, folosim aici agregarea $match cu agregarea $group. Agregația $match acceptă condițiile de interogare care sunt date într-un document și transmite documentul potrivit agregației $group, care returnează apoi suma documentului pentru fiecare grup. Pentru acumulatorul $sum, interogarea este prezentată mai jos.

>db.Books.aggregate([

{ $match:{ order_status:'În stoc'}},

{ $group:{ _id:'$author.name', totalBooks: { $sum:1 } }

}])

Interogarea de agregare de mai sus începe cu operatorul $match care se potrivește cu toate „order_status” a căror stare este „In-Stock” și transmisă grupului $ ca intrare. Apoi, operatorul $group are expresia acumulator $sum care scoate suma tuturor cărților din stoc. Rețineți că „$sum:1” adaugă 1 fiecărui document care aparține aceluiași grup. Rezultatul de aici a arătat doar două documente grupate care au „startul_comandei” asociat cu „În stoc”.

Exemplul # 5: Utilizați agregarea $group cu agregarea $sort

Operatorul $group aici este folosit cu operatorul „$sort” care este folosit pentru a sorta documentele grupate. Următoarea interogare are trei pași pentru operația de sortare. Mai întâi este etapa $match, apoi etapa $group și ultima este etapa $sort care sortează documentul grupat.

>db.Books.aggregate([

{ $match:{ order_status:'out-of-stock'}},

{ $group:{ _id:{ authorName :'$author.name'}, totalBooks: { $sum:1} } },

{ $sort:{ authorName:1}}

])

Aici, am preluat documentul potrivit al cărui „order_status” este epuizat. Apoi, documentul potrivit este introdus în etapa $group care a grupat documentul cu câmpul „authorName” și „totalBooks”. Expresia $group este asociată cu acumulatorul $sum la numărul total de cărți „epuizate”. Documentele grupate sunt apoi sortate cu expresia $sort în ordine crescătoare, deoarece „1” indică aici ordinea crescătoare. Documentul de grup sortat în ordinea specificată se obține în următoarea ieșire.

Exemplul # 6: Utilizați agregarea $group pentru o valoare distinctă

Procedura de agregare grupează și documentele după articol folosind operatorul $group pentru a extrage valorile distincte ale articolului. Să avem expresia de interogare a acestei declarații în MongoDB.

>db.Books.aggregate( [ { $grup : { _id : „$titlu” } } ] ).pretty();

Interogarea de agregare este aplicată colecției Cărți pentru a obține valoarea distinctă a documentului de grup. Grupul $ de aici ia expresia _id care scoate valorile distincte pe măsură ce am introdus câmpul „titlu”. Rezultatul documentului de grup este obținut la rularea acestei interogări care are grupul de nume de titlu în câmpul _id.

Concluzie

Ghidul a avut ca scop clarificarea conceptului de operator de agregare $group pentru gruparea documentului în baza de date MongoDB. Abordarea agregată MongoDB îmbunătățește fenomenele de grupare. Structura de sintaxă a operatorului $group este demonstrată cu programele exemplu. Pe lângă exemplul de bază al operatorilor $group, am folosit și acest operator cu niște acumulatori precum $push, $min, $sum și operatori precum $match și $sort.