Како агрегација група функционише у МонгоДБ-у?
Оператор $гроуп треба да се користи за груписање улазних докумената према наведеном изразу _ид. Затим би требало да врати један документ са укупним вредностима за сваку посебну групу. За почетак имплементације, креирали смо колекцију „Књиге“ у МонгоДБ-у. Након креирања збирке „Књиге“, убацили смо документе који су повезани са различитим пољима. Документи се убацују у колекцију преко методе инсертМани(), пошто је упит који треба да се изврши приказан испод.
>дб.Боокс.инсертМани([{
_ид: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: Користите $гроуп агрегацију за различиту вредност
Процедура агрегације такође групише документе по ставци користећи оператор $гроуп да издвоји различите вредности ставке. Хајде да имамо израз упита за ову изјаву у МонгоДБ.
>дб.Боокс.аггрегате( [ { $гроуп : { _ид : '$титле' } } ] ).претти();Упит за агрегирање се примењује на колекцију Боокс да би се добила посебна вредност групног документа. Група $ овде узима израз _ид који даје различите вредности пошто смо у њега унели поље „титле“. Излаз групног документа се добија покретањем овог упита који има групу имена наслова наспрам поља _ид.
Закључак
Водич је имао за циљ да разјасни концепт оператора агрегације $гроуп за груписање документа у бази података МонгоДБ. МонгоДБ агрегатни приступ побољшава феномен груписања. Структура синтаксе оператора $гроуп приказана је у примерима програма. Поред основног примера оператора $гроуп, овај оператор смо такође користили са неким акумулаторима као што су $пусх, $мин, $сум и операторима као што су $матцх и $сорт.