Jag tror inte att detta för närvarande (2.6) är möjligt att göra med en aggregeringspipeline. Det är svårt att ge ett exakt argument om varför inte, men i grunden utför aggregeringspipelinen transformationer av dokumentströmmar, ett dokument i taget. Det finns ingen medvetenhet inom pipelinen om tillståndet för själva strömmen, vilket är vad du behöver för att avgöra att du har nått gränsen för A, B, etc och behöver släppa ytterligare dokument av samma typ. $group
sammanför flera dokument och låter deras fältvärden sammantaget påverka det resulterande gruppdokumentet ($sum
, $avg
, etc.). Kanske är detta vettigt, men det är nödvändigtvis inte rigoröst eftersom det finns enkla operationer du kan lägga till för att göra det möjligt att begränsa baserat på typerna, t.ex. lägga till en $push x
ackumulator till $group
som bara pushar värdet om den matris som skickas till har färre än x element.
Även om jag hade ett sätt att göra det, skulle jag rekommendera att bara göra två aggregationer. Håll det enkelt.