TLDR;
Das Mongoose-Äquivalent wäre, zuerst die verschachtelte Abfrage auszuführen und die Ergebnisse an die Aggregation zu übergeben.
groups.distinct("p", {"enable": true}).exec().then(matchingGroups => {
return users.aggregate([
{$match: {"id": {$in: ["0", "1", "2"]}, p: {$in: matchingGroups}}},
{$group:{_id:"$v", number:{$sum:1 }}}
]).exec();
}).then(aggregationResult => {
console.log(aggregationResult);
});
Erklärung
Beim Ausführen des folgenden Skripts in der Mongo-Shell wird zuerst die innere Abfrage (distinct) übermittelt und dann das Ergebnis an die äußere Abfrage (Aggregation) übergeben, die dann zur Ausführung übermittelt wird. Dies kann durch Erfassen einer Paketverfolgung bestätigt werden. In den angehängten Bildern können wir die erste Abfrageübermittlung sehen (Paket 9) die empfangene Antwort (Pakete 10 und 11) und die Aggregationsabfrage (Pakete 12 und 13).