Ich glaube nicht, dass dies derzeit (2.6) mit einer Aggregationspipeline möglich ist. Es ist schwierig, ein genaues Argument dafür zu liefern, warum nicht, aber im Grunde führt die Aggregationspipeline Transformationen von Dokumentenströmen durch, ein Dokument nach dem anderen. In der Pipeline gibt es kein Bewusstsein für den Status des Streams selbst, was Sie benötigen, um festzustellen, dass Sie das Limit für A's, B's usw. erreicht haben und weitere Dokumente des gleichen Typs löschen müssen. $group
bringt mehrere Dokumente zusammen und lässt zu, dass ihre Feldwerte insgesamt das resultierende Gruppendokument beeinflussen ($sum
, $avg
, etc.). Vielleicht macht das Sinn, aber es ist notwendigerweise nicht streng, weil es einfache Operationen gibt, die Sie hinzufügen könnten, um es möglich zu machen, basierend auf den Typen einzuschränken, z. B. das Hinzufügen eines $push x
Akkumulator zu $group
das den Wert nur pusht, wenn das Array, in das gepusht wird, weniger als x Elemente hat.
Selbst wenn ich eine Möglichkeit hätte, würde ich empfehlen, nur zwei Aggregationen durchzuführen. Halten Sie es einfach.