我同时有几个类似的聚合操作,例如
db.cases.aggregate([
{$match : query},
{$unwind : "factors"},
//operation 1 of the above result
// ...
])
db.cases.aggregate([
{$match : query},
{$unwind : "factors"},
//operation 2 of the above result
// ...
])
聚合的前两个阶段($match
,$unwind
)是相同的,我认为重复这些重复阶段是浪费。所以我想问是否存在分支管道的方法,以便它可以分享前两个阶段的结果,如下所示,
db.cases.aggregation([
{$match : query},
{$unwind : "factors"},
forks : [
{... operation 1},
{... operation 2}
]
])
答案 0 :(得分:1)
这是不久之前,但只是因为你知道它已经实施了:
https://docs.mongodb.com/manual/reference/operator/aggregation/facet/
{ $facet:
{
<outputField1>: [ <stage1>, <stage2>, ... ],
<outputField2>: [ <stage1>, <stage2>, ... ],
...
}
}
答案 1 :(得分:0)
因为这看起来像一个非常好的功能提案 - 现阶段的Mongo没有这样的功能。
如果服务器上的查询很重,您可以考虑在所有类似的管道条目之后使用$out
阶段,然后查询新创建的集合。
修改强>
mondo jira ticket:https://jira.mongodb.org/browse/SERVER-24804