我想使用相同的过滤器执行两个聚合函数。我可以做到以下几点:
// create first aggregate query
var query1 = myModel.aggregate([
{ $match: myMatchCriteria },
{ $group1: myGroupCriteria1 }
]);
// create second aggregate query
var query2 = myModel.aggregate([
{ $match: myMatchCriteria },
{ $group2: myGroupCriteria2 }
]);
// execute both queries
query1.exec(myCallback);
query2.exec(myCallback);
但它似乎并不是最优的:据我所知,$ match在引擎盖下使用了find(),所以我会查询我的数据库两次以获得相同的输出。
它有某种方式来节省" find()结果,然后将聚合应用于它们?类似的东西:
var myFilteredDocuments = myModel.find(myMatchCriteria);
var query1 = myFilteredDocuments.aggregate([{ $group2: myGroupCriteria1 }]),
query2 = myFilteredDocuments.aggregate([{ $group2: myGroupCriteria2 }])