Node.js mongoose聚合:两个不同$group的相同$match
我想使用相同的过滤器执行两个聚合函数。我可以做到以下几点:Node.js mongoose聚合:两个不同$group的相同$match,node.js,mongodb,mongoose,aggregation-framework,Node.js,Mongodb,Mongoose,Aggregation Framework,我想使用相同的过滤器执行两个聚合函数。我可以做到以下几点: // create first aggregate query var query1 = myModel.aggregate([ { $match: myMatchCriteria }, { $group1: myGroupCriteria1 } ]); // create second aggregate query var query2 = myModel.aggregate([ { $match: my
// 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 }])
尝试
$out
管道阶段。它应该将您的结果保存到指定的集合中。将有一个新的运算符$facet在即将到来的version@Saleem谢谢,现在应该可以了。为了完成@profesor79评论,我找到了一些关于$facet
的信息。它将完全满足我的需要。