MongoDB:$ redact和$ filter之间的区别

时间:2018-03-30 17:09:12

标签: mongodb mongodb-query aggregation-framework

我已经阅读了mongo文档,并且似乎有点困惑$filter$redact运算符是否相同,如果不是如何?我已经使用它们来获取文档中的数组子集。 $redact似乎是相同的,但mongo定义似乎不同。但是,mongo站点上的示例演示了$redact的数组子集操作。我清楚$filter运算符,它专门用于数组,而$redact则不明确。什么是$redact超过$filter的优势?它的用例是什么?

2 个答案:

答案 0 :(得分:0)

聚合操作对值组执行操作并返回计算结果。

MongoDB将聚合操作分阶段执行,每个阶段执行时生成的输出作为下一阶段到聚合管道的输入。

$ redact是聚合管道的一个阶段,用于根据具体情况限制文档内容。

指定为$ redact阶段参数的表达式解析为$$ DESCEND,$$ PRUNE或$$ KEEP系统变量。

$ filter是一个运算符,用于汇总管道的$ project阶段过滤一个数组,该数组根据特定条件返回数组的子集。

答案 1 :(得分:0)

与$ filter相比,$ redact有何优势?

在大多数用例中,我发现$filter的性能要比$redact

您可以在两个聚合查询上运行explain("executionStats"),以便自己查看性能差异。

示例:

db.shirts.explain("executionStats").aggregate([{
   $redact: {
      $cond: {
         'if': {
             $or: [
                { $eq: ['$color', 'red'] },
                { $not: '$color' }]
              },
         then: '$$DESCEND',
         'else': '$$PRUNE'
     }
  }
}]) 

A similar comparison can be found here