МонгоДБ Гроуп Аггрегатион

Mongodb Group Aggregation



Агрегација је поступак издвајања података из МонгоДБ колекције. Обрађује бројне документе и даје процењене резултате. Агрегација у МонгоДБ-у има неколико оператора и метода који извршавају различите задатке. Међу тим операторима, $гроуп оператор групише документе за свако јединствено груписање и распоређује их према изразу који је дефинисан. Оператор групе је значајан у МонгоДБ-у јер омогућава широк спектар манипулација подацима. Агрегација $гроуп у примеру МонгоДБ заједно са различитим акумулаторима је дата испод.

Како агрегација група функционише у МонгоДБ-у?

Оператор $гроуп треба да се користи за груписање улазних докумената према наведеном изразу _ид. Затим би требало да врати један документ са укупним вредностима за сваку посебну групу. За почетак имплементације, креирали смо колекцију „Књиге“ у МонгоДБ-у. Након креирања збирке „Књиге“, ​​убацили смо документе који су повезани са различитим пољима. Документи се убацују у колекцију преко методе инсертМани(), пошто је упит који треба да се изврши приказан испод.

>дб.Боокс.инсертМани([

{
_ид:1,
наслов: 'Ана Карењина',
цена: 290,
година: 1879,
ордер_статус: 'На лагеру',
аутор: {
'наме': 'Лав Толстој'
}
},
{
_ид:2,
наслов: 'Убити птицу ругалицу',
цена: 500,
година: 1960,
ордер_статус: 'није на залихама',
аутор: {
'наме': 'Харпер Лее'
}
},
{
_ид:3,
наслов: 'Невидљиви човек',
цена: 312,
година: 1953,
ордер_статус: 'На лагеру',
аутор: {
'наме': 'Ралпх Еллисон'
}
},
{
_ид:4,
наслов: 'Вољени',
цена: 370,
година: 1873,
статус_поруџбине: 'оут_оф_стоцк',
аутор: {
'наме': 'Тони Моррисон'
}
},
{
_ид:5,
наслов: 'Ствари се распадају',
цена: 200,
година: 1958,
ордер_статус: 'На лагеру',
аутор: {
'наме': 'Цхинуа Ацхебе'
}
},
{
_ид:6,
наслов: 'Љубичаста боја',
цена: 510,
година: 1982,
ордер_статус: 'није на залихама',
аутор: {
'наме': 'Алице Валкер'
}
}
])

Документи се успешно чувају у колекцији „Књиге“ без икаквих грешака јер је излаз потврђен као „тачан“. Сада ћемо користити ове документе колекције „Боокс“ за извођење агрегације „$гроуп“.









Пример # 1: Коришћење агрегације $гроуп



Овде је приказана једноставна употреба агрегације $гроуп. Збирни упит прво уноси оператор „$гроуп“, а затим оператор „$гроуп“ даље узима изразе за генерисање груписаних докумената.





>дб.Боокс.аггрегате([

{ $гроуп:{ _ид:'$аутхор.наме'} }

])

Горњи упит за оператор $гроуп је специфициран са пољем „_ид“ да би се израчунале укупне вредности за све улазне документе. Затим се пољу „_ид“ додељује „$аутхор.наме“ које формира другу групу у пољу „_ид“. Одвојене вредности $аутхор.наме ће бити враћене јер не израчунавамо никакве акумулиране вредности. Извршење агрегатног упита $гроуп има следећи излаз. Поље _ид има вредности аутор.имена.



Пример бр. 2: Коришћење агрегације $гроуп са $пусх акумулатором

Пример $гроуп агрегације користи било који акумулатор који је већ поменут горе. Али можемо користити акумулаторе у агрегацији $гроуп. Оператори акумулатора су они који се користе у пољима улазног документа осим оних која су „груписана“ под „_ид“. Претпоставимо да желимо да гурнемо поља израза у низ, а затим се акумулатор „$пусх“ позива у оператору „$гроуп“. Пример ће вам помоћи да јасније разумете „$пусх“ акумулатор „$групе“.

>дб.Боокс.аггрегате(

[

{ $гроуп : { _ид : '$_ид', година: { $пусх: '$иеар' } } }

]

).прилично();

Овде желимо да групишемо датум године издања датих књига у низ. Горњи упит треба применити да би се ово постигло. Упит за агрегацију је обезбеђен са изразом где оператор „$гроуп“ узима израз поља „_ид“ и израз поља „иеар“ да би добио годину групе користећи $пусх акумулатор. Излаз добијен из овог специфичног упита креира низ поља година и унутар њега складишти враћени груписани документ.

Пример бр. 3: Коришћење агрегације $гроуп са „$мин“ акумулатором

Затим имамо акумулатор „$мин“ који се користи у агрегацији $гроуп да бисмо добили минималну подударну вредност из сваког документа у колекцији. Израз упита за $мин акумулатор је дат испод.

>дб.Боокс.аггрегате([

{
$гроуп:{
_ид:{
титле: '$титле',
ордер_статус: '$ордер_статус'
},
минПрице:{$мин: '$прице'}
}
}
])

Упит има израз агрегације „$гроуп“ где смо груписали документ за поља „титле“ и „ордер_статус“. Затим смо обезбедили $мин акумулатор који је груписао документе добијајући вредности минималне цене из негруписаних поља. Када покренемо овај упит $мин акумулатора у наставку, он враћа груписане документе по наслову и статусу ордер_статуса у низу. Прво се појављује минимална цена, а последња највиша цена документа.

Пример # 4: Користите $гроуп Аггрегатион са $сум Акумулатором

Да бисте добили збир свих нумеричких поља помоћу оператора $гроуп, примењује се операција акумулатора $сум. Овај акумулатор разматра ненумеричке вредности у колекцијама. Поред тога, овде користимо агрегацију $матцх са агрегацијом $гроуп. $матцх агрегација прихвата услове упита који су дати у документу и прослеђује подударни документ у $гроуп агрегацију која затим враћа збир документа за сваку групу. За акумулатор $сум, упит је представљен у наставку.

>дб.Боокс.аггрегате([

{ $матцх:{ ордер_статус:'На залихама'}},

{ $гроуп:{ _ид:'$аутхор.наме', тоталБоокс: { $сум:1 } }

}])

Горњи упит за агрегацију почиње са оператором $матцх који одговара свим „ордер_статусима“ чији је статус „На залихама“ и прослеђује се групи $ као улаз. Затим, $гроуп оператор има израз акумулатора $сум који даје збир свих књига у залихама. Имајте на уму да „$сум:1“ додаје 1 сваком документу који припада истој групи. Овде је излаз показао само два груписана документа која имају „ордер_статус“ повезан са „Ин-Стоцк“.

Пример # 5: Користите $гроуп агрегацију са $сорт агрегацијом

Оператор $гроуп овде се користи са оператором '$сорт' који се користи за сортирање груписаних докумената. Следећи упит има три корака до операције сортирања. Прва је фаза $матцх, затим фаза $гроуп, а последња је фаза $сорт која сортира груписани документ.

>дб.Боокс.аггрегате([

{ $матцх:{ ордер_статус:'није на залихама'}},

{ $гроуп:{ _ид:{ аутхорНаме :'$аутхор.наме'}, укупно књига: { $сум:1} } },

{ $сорт:{ аутхорНаме:1}}

])

Овде смо преузели одговарајући документ чији „ордер_статус“ није на залихама. Затим се подударни документ уноси у фазу $гроуп која је груписала документ са пољем „аутхорНаме“ и „тоталБоокс“. Израз $гроуп је повезан са акумулатором $сум са укупним бројем књига „ван залиха“. Груписани документи се затим сортирају помоћу израза $сорт у растућем редоследу јер „1“ овде означава растући редослед. Сортирани групни документ по наведеном редоследу добија се у следећем излазу.

Пример # 6: Користите $гроуп агрегацију за различиту вредност

Процедура агрегације такође групише документе по ставци користећи оператор $гроуп да издвоји различите вредности ставке. Хајде да имамо израз упита за ову изјаву у МонгоДБ.

>дб.Боокс.аггрегате( [ { $гроуп : { _ид : '$титле' } } ] ).претти();

Упит за агрегирање се примењује на колекцију Боокс да би се добила посебна вредност групног документа. Група $ овде узима израз _ид који даје различите вредности пошто смо у њега унели поље „титле“. Излаз групног документа се добија покретањем овог упита који има групу имена наслова наспрам поља _ид.

Закључак

Водич је имао за циљ да разјасни концепт оператора агрегације $гроуп за груписање документа у бази података МонгоДБ. МонгоДБ агрегатни приступ побољшава феномен груписања. Структура синтаксе оператора $гроуп приказана је у примерима програма. Поред основног примера оператора $гроуп, овај оператор смо такође користили са неким акумулаторима као што су $пусх, $мин, $сум и операторима као што су $матцх и $сорт.