分叉聚合管道

时间:2016-06-27 06:50:26

标签: mongodb mongodb-query

我同时有几个类似的聚合操作,例如

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}
   ]
])

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