MongoDB中$redact操作符的使用

介绍

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/

posted @ 2017-09-14 23:29  zhangjpn  阅读(2282)  评论(0编辑  收藏  举报