Jeg tror ikke, at dette på nuværende tidspunkt (2.6) er muligt at gøre med én aggregeringspipeline. Det er svært at give et præcist argument for hvorfor ikke, men dybest set udfører aggregeringspipelinen transformationer af strømme af dokumenter, et dokument ad gangen. Der er ingen bevidsthed i pipelinen om tilstanden af selve strømmen, hvilket er det, du skal bruge for at fastslå, at du har nået grænsen for A'er, B'er osv. og er nødt til at droppe yderligere dokumenter af samme type. $group
bringer flere dokumenter sammen og tillader deres feltværdier samlet at påvirke det resulterende gruppedokument ($sum
, $avg
, etc.). Måske giver dette mening, men det er nødvendigvis ikke strengt, fordi der er simple operationer, du kan tilføje for at gøre det muligt at begrænse baseret på typerne, f.eks. tilføje en $push x
akkumulator til $group
der kun skubber værdien, hvis det array, der skubbes til, har færre end x elementer.
Selvom jeg havde en måde at gøre det på, vil jeg anbefale bare at lave to sammenlægninger. Hold det enkelt.