TLDR;
Odpowiednikiem mangusty byłoby najpierw uruchomienie zagnieżdżonego zapytania i przekazanie wyników do agregacji.
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);
});
Wyjaśnienie
Podczas wykonywania poniższego skryptu w powłoce mongo, dzieje się tak, że najpierw przesyłane jest zapytanie wewnętrzne (odrębne), a następnie wynik jest przekazywany do zapytania zewnętrznego (agregacja), które jest następnie przesyłane do wykonania. Można to potwierdzić, przechwytując śledzenie pakietów. Na załączonych obrazach widzimy przesłanie pierwszego zapytania (pakiet 9) otrzymana odpowiedź (pakiety 10 i 11) oraz przesłanie zapytania agregującego (pakiety 12 i 13).