Не мисля, че това в момента (2.6) е възможно да се направи с един конвейер за агрегиране. Трудно е да се даде точен аргумент защо не, но основно конвейерът за агрегиране извършва трансформации на потоци от документи, един документ в даден момент. В рамките на тръбопровода няма осведоменост за състоянието на самия поток, което ще ви е необходимо, за да определите, че сте достигнали лимита за A, B и т.н. и трябва да изхвърлите допълнителни документи от същия тип. $group
обединява множество документи заедно и позволява стойностите на техните полета в съвкупност да повлияят на получения групов документ ($sum
, $avg
и др.). Може би това има някакъв смисъл, но непременно не е строго, защото има прости операции, които можете да добавите, за да направите възможно ограничаването въз основа на типовете, например добавяне на $push x
акумулатор към $group
което избутва стойността само ако масивът, към който се избутва, има по-малко от x елементи.
Дори и да имах начин да го направя, бих препоръчал просто да направя две агрегации. Бъдете прости.