Nie sądzę, aby obecnie (2.6) można to zrobić za pomocą jednego potoku agregacji. Trudno podać dokładny argument, dlaczego nie, ale zasadniczo potok agregacji wykonuje transformacje strumieni dokumentów, jeden dokument na raz. W potoku nie ma świadomości stanu samego strumienia, co jest potrzebne, aby określić, że osiągnąłeś limit dla A, B itd. i musisz porzucić kolejne dokumenty tego samego typu. $group
łączy ze sobą wiele dokumentów i pozwala zagregowanym wartościom pól wpłynąć na wynikowy dokument grupowy ($sum
, $avg
itp.). Może ma to jakiś sens, ale niekoniecznie jest to rygorystyczne, ponieważ istnieją proste operacje, które można dodać, aby umożliwić ograniczenie na podstawie typów, np. dodanie $push x
akumulator do $group
która wypycha wartość tylko wtedy, gdy przekazywana tablica ma mniej niż x elementów.
Nawet gdybym miał na to sposób, sugerowałbym wykonanie dwóch agregacji. Zachowaj prostotę.