TLDR;
Điều tương đương mongoose sẽ là chạy truy vấn lồng nhau trước và chuyển kết quả vào tập hợp.
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);
});
Giải thích
Khi thực thi tập lệnh sau trong mongo shell, điều xảy ra là truy vấn bên trong (phân biệt) được gửi trước, và sau đó kết quả được chuyển đến truy vấn bên ngoài (tổng hợp), sau đó sẽ được gửi để thực thi. Điều này có thể được xác nhận bằng cách chụp một dấu vết gói tin. Trong các hình ảnh đính kèm, chúng ta có thể thấy gửi truy vấn đầu tiên (gói 9) phản hồi đã nhận (gói 10 và 11) và gửi truy vấn tổng hợp (gói 12 và 13).