MongoDB grupės agregavimas

Mongodb Grupes Agregavimas



Agregavimas yra duomenų ištraukimo iš MongoDB kolekcijos procedūra. Ji apdoroja daugybę dokumentų ir pateikia numatomus rezultatus. „MongoDB“ agregacija turi keletą operatorių ir metodų, kurie atlieka įvairias užduotis. Tarp šių operatorių $group operatorius sugrupuoja dokumentus kiekvienai unikaliai grupei ir sutvarko juos pagal apibrėžtą išraišką. Grupės operatorius yra svarbus MongoDB, nes jis palengvina daugybę duomenų manipuliavimo. $group agregacija MongoDB pavyzdyje kartu su skirtingais kaupikliais pateikta žemiau.

Kaip „MongoDB“ veikia grupių agregavimas?

Operatorius $group turėtų būti naudojamas sugrupuoti įvesties dokumentus pagal nurodytą _id išraišką. Tada jis turėtų grąžinti vieną dokumentą su bendromis kiekvienos atskiros grupės vertėmis. Norėdami pradėti nuo diegimo, MongoDB sukūrėme kolekciją „Knygos“. Sukūrę kolekciją „Knygos“, įtraukėme dokumentus, kurie yra susieti su skirtingais laukais. Dokumentai į kolekciją įterpiami naudojant insertMany() metodą, kaip toliau parodyta vykdytina užklausa.

>db.Books.insertMany([

{
_id:1,
pavadinimas: 'Anna Karenina',
kaina: 290,
metai: 1879 m.
order_status: 'Turime sandėlyje',
autorius: {
'vardas': 'Leo Tolstojus'
}
},
{
_id:2,
Pavadinimas: 'Nužudyti juokdarį',
kaina: 500,
metai: 1960 m.
order_status: 'nebuvo sandėlyje',
autorius: {
'vardas': 'Harper Lee'
}
},
{
_id:3,
pavadinimas: „Nematomas žmogus“,
kaina: 312,
metai: 1953 m.
order_status: 'Turime sandėlyje',
autorius: {
'vardas': 'Ralfas Elisonas'
}
},
{
_id:4,
Pavadinimas: 'Mylimas',
kaina: 370,
metai:  1873,
order_status: 'out_of_stock',
autorius: {
'vardas': 'Tonis Morrisonas'
}
},
{
_id:5,
pavadinimas: „Daiktai griūva“,
kaina: 200,
metai: 1958 m.
order_status: 'Turime sandėlyje',
autorius: {
'vardas': 'Chinua Achebe'
}
},
{
_id:6,
pavadinimas: 'Purpurinė spalva',
kaina: 510,
metai: 1982 m.
order_status: 'nebuvo sandėlyje',
autorius: {
'vardas': 'Alisa Walker'
}
}
])

Dokumentai sėkmingai saugomi „Knygų“ kolekcijoje be klaidų, nes išvestis pripažįstama kaip „teisinga“. Dabar šiuos „Knygų“ kolekcijos dokumentus naudosime „$group“ agregacijai atlikti.









1 pavyzdys: $group agregacijos naudojimas



Čia parodytas paprastas $group agregacijos naudojimas. Suvestinė užklausa pirmiausia įveda operatorių „$group“, tada operatorius „$group“ toliau naudoja išraiškas, kad generuotų sugrupuotus dokumentus.





>db.Books.aggregate([

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

])

Aukščiau pateikta operatoriaus $group užklausa nurodoma lauke „_id“, kad būtų galima apskaičiuoti bendras visų įvesties dokumentų vertes. Tada laukas „_id“ priskiriamas „$author.name“, kuris lauke „_id“ sudaro kitą grupę. Bus grąžintos atskiros $author.name reikšmės, nes neskaičiuojame jokių sukauptų verčių. $group agregate užklausos vykdymas turi tokią išvestį. Lauke _id yra autoriaus.vardai reikšmės.



2 pavyzdys: $group agregacijos naudojimas su $push kaupikliu

$group agregacijos pavyzdyje naudojamas bet koks akumuliatorius, kuris jau buvo paminėtas aukščiau. Bet mes galime naudoti kaupiklius $group agregate. Akumuliatoriaus operatoriai yra tie, kurie naudojami įvesties dokumento laukuose, išskyrus tuos, kurie „sugrupuoti“ po „_id“. Tarkime, kad norime įstumti išraiškos laukus į masyvą, tada „$push“ kaupiklis iškviečiamas operatoriuje „$group“. Pavyzdys padės aiškiau suprasti „$grupės“ kaupiklį „$push“.

>db.Books.aggregate(

[

{ $group : { _id : '$_id', metai: { $push: '$year' } } }

]

).graži();

Čia norime sugrupuoti masyve pateiktų knygų išleidimo metų datą. Aukščiau pateikta užklausa turėtų būti taikoma norint tai atlikti. Apibendrinimo užklausa pateikiama su išraiška, kur operatorius „$group“ paima lauko išraišką „_id“ ir lauko išraišką „year“, kad gautų grupės metus naudojant $push kaupiklį. Iš šios konkrečios užklausos gauta išvestis sukuria metų laukų masyvą ir jame išsaugo grąžintą sugrupuotą dokumentą.

3 pavyzdys: $group agregacijos naudojimas su „$min“ kaupikliu

Be to, turime „$min“ kaupiklį, kuris naudojamas $group agregate, kad gautume mažiausią atitikimo vertę iš kiekvieno kolekcijos dokumento. $min kaupiklio užklausos išraiška pateikta žemiau.

>db.Books.aggregate([

{
$group:{
_id:{
pavadinimas: '$title',
order_status: '$order_status'
},
minKaina:{$min: '$kaina'}
}
}
])

Užklausoje yra „$group“ apibendrinimo išraiška, kurioje sugrupavome dokumentą laukams „pavadinimas“ ir „užsakymo_būsena“. Tada pateikėme $min kaupiklį, kuris sugrupavo dokumentus, gaudamas minimalių kainų vertes iš nesugrupuotų laukų. Kai vykdome šią $min kaupimo užklausą žemiau, ji grąžina sugrupuotus dokumentus pagal pavadinimą ir order_status iš eilės. Pirma rodoma minimali kaina, o paskutinė – didžiausia dokumento kaina.

4 pavyzdys: naudokite $group agregaciją su $sum kaupikliu

Norint gauti visų skaitinių laukų sumą naudojant $group operatorių, naudojama $sum kaupimo operacija. Šiame kaupiklyje atsižvelgiama į rinkinių neskaitines reikšmes. Be to, čia naudojame $match agregaciją su $group agregacija. $match agregacija priima užklausos sąlygas, pateiktas dokumente, ir perduoda suderintą dokumentą $group agregacijai, kuri grąžina kiekvienos grupės dokumento sumą. $sum kaupiklio užklausa pateikiama žemiau.

>db.Books.aggregate([

{ $match:{ order_status:'In-Stock'}},

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

}])

Aukščiau pateikta agregavimo užklausa prasideda operatoriumi $match, kuris atitinka visus „order_status“, kurių būsena yra „In-Stock“, ir perduodama grupei $ kaip įvestis. Tada operatorius $group turi $sum accumulator išraišką, kuri išveda visų atsargų knygų sumą. Atminkite, kad „$sum:1“ prideda 1 prie kiekvieno dokumento, priklausančio tai pačiai grupei. Išvestis čia parodė tik du sugrupuotus dokumentus, kurių „užsakymo_būsena“ yra susieta su „In-Stock“.

5 pavyzdys: naudokite $group agregaciją su $sort agregacija

Operatorius $group čia naudojamas kartu su operatoriumi '$sort', kuris naudojamas sugrupuotiems dokumentams rūšiuoti. Šioje užklausoje yra trys rūšiavimo operacijos žingsniai. Pirmasis yra $match etapas, tada $group etapas, o paskutinis yra $rūšiavimo etapas, kuris rūšiuoja sugrupuotą dokumentą.

>db.Books.aggregate([

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

{ $group:{ _id:{ autoriaus vardas :'$autoriaus.vardas'}, totalBooks: { $sum:1} } },

{ $rūšiuoti:{ autoriaus vardas:1}}

])

Čia mes gavome atitikusį dokumentą, kurio „užsakymo_būsena“ nėra sandėlyje. Tada suderintas dokumentas įvedamas $group etape, kuris sugrupavo dokumentą su laukais „authorName“ ir „totalBooks“. $group išraiška yra susieta su $sum kaupikliu su bendru knygų, kurių nėra sandėlyje, skaičiumi. Tada sugrupuoti dokumentai surūšiuojami naudojant $rūšiavimo išraišką didėjančia tvarka, nes „1“ čia nurodo didėjančią tvarką. Surūšiuotas grupės dokumentas nurodyta tvarka gaunamas sekančioje išvestyje.

6 pavyzdys: naudokite $group agregaciją atskirai vertei

Sumavimo procedūra taip pat sugrupuoja dokumentus pagal elementus, naudojant operatorių $group, kad išskirtų atskirų elementų reikšmes. Leiskite mums pateikti šio teiginio užklausos išraišką MongoDB.

>db.Books.aggregate( [ { $group : { _id : '$pavadinimas' } } ] ).pretty();

Apibendrinimo užklausa taikoma knygų kolekcijai, kad būtų galima gauti atskirą grupės dokumento vertę. $grupė čia paima _id išraišką, kuri išveda skirtingas reikšmes, nes įvedėme lauką 'pavadinimas'. Grupės dokumento išvestis gaunama vykdant šią užklausą, kurios pavadinimų pavadinimų grupė yra lauke _id.

Išvada

Vadovu buvo siekiama išsiaiškinti $group agregavimo operatoriaus koncepciją, skirtą dokumento grupavimui MongoDB duomenų bazėje. MongoDB suvestinis metodas pagerina grupavimo reiškinius. Operatoriaus $group sintaksės struktūra pavaizduota pavyzdinėmis programomis. Be pagrindinio $group operatorių pavyzdžio, mes taip pat panaudojome šį operatorių su kai kuriais kaupikliais, pvz., $push, $min, $sum ir tokiais operatoriais kaip $match ir $sort.