TLDR;
L'equivalente mangusta sarebbe eseguire prima la query nidificata e passare i risultati all'aggregazione.
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);
});
Spiegazione
Quando si esegue lo script seguente in mongo shell, ciò che accade è che la query interna (distinta) viene inviata per prima, quindi il risultato viene passato alla query esterna (aggregazione) che viene quindi inviata per l'esecuzione. Ciò può essere confermato acquisendo una traccia di pacchetto. Nelle immagini allegate, possiamo vedere il primo invio di query (pacchetto 9) la risposta ricevuta (pacchetti 10 e 11) e invio della query di aggregazione (pacchetti 12 e 13).