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