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.