介绍
redact <- redaction 修订/校验,意思是对文档内容进行过滤,选择一些过滤或保留的信息 。
access level 存取等级 有三种:
- $$DESCEND 返回当前等级的文档,排除掉该等级下的内嵌等级文档;
- $$PRUNE 排除掉满足条件的当前等级及其下属等级的所有内容,而不再检查其内嵌文档是否还有满足条件的内容;
- $$KEEP 保留满足条件的当前等级及其下属等级的所有内容,而不再检查其内嵌文档是否有满足条件的内容;
与其他完全过滤不同,$redact聚合是对文档内部进行操作,返回的是经过删减的文档,而不是将整个文档都删除掉。该操作符常常和$cond一起使用。
示例
{$redact:{$cond:{
if: { $gt: [ { $size: { $setIntersection: [ "$tags", userAccess ] } }, 0 ] }, // $setIntersection 多个数组的交集,返回数组
then:"$$DESCEND", //满足条件则保留对应等级文档的内容
else:"$$PRUNE", //否则剔除掉该子文档
}}}
{$redact: {
$cond: {
if: { $eq: [ "$level", 5 ] },
then: "$$PRUNE",
else: "$$DESCEND"
}}}
来源: https://docs.mongodb.com/manual/reference/operator/aggregation/redact/