TLDR;
Mongoose-ækvivalenten ville være at køre den indlejrede forespørgsel først og sende resultaterne til aggregeringen.
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);
});
Forklaring
Når du udfører følgende script i mongo shell, sker det, at den indre forespørgsel (distinkt) sendes først, og derefter sendes resultatet til den ydre forespørgsel (aggregering), som derefter sendes til eksekvering. Dette kan bekræftes ved at fange et pakkespor. På de vedhæftede billeder kan vi se den første forespørgselsindsendelse (pakke 9) det modtagne svar (pakke 10 og 11) og indsendelse af aggregeringsforespørgsler (pakke 12 og 13).