TLDR ;
L'équivalent mangouste serait d'exécuter d'abord la requête imbriquée et de transmettre les résultats à l'agrégation.
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);
});
Explication
Lors de l'exécution du script suivant dans mongo shell, ce qui se passe est que la requête interne (distincte) est soumise en premier, puis le résultat est transmis à la requête externe (agrégation) qui est ensuite soumise pour exécution. Cela peut être confirmé en capturant une trace de paquet. Dans les images ci-jointes, nous pouvons voir la première soumission de requête (paquet 9) la réponse reçue (paquets 10 et 11) et la soumission de la requête d'agrégation (paquets 12 et 13).