$redact¶根据文档本身中存储的信息限制文档的内容。
该$redact阶段具有以下原型形式:
该参数可以是任何有效表达式,只要它解析为$$ DESCEND, $$ PRUNE或$$ KEEP系统变量即可。有关表达式的更多信息,请参见表达式。
| 系统变量 | 描述 |
|---|---|
| $$ DESCEND | $redact返回当前文档级别的字段,不包括嵌入式文档。要将嵌入式文档和嵌入式文档包含在数组中,请将$cond
表达式应用于嵌入式文档,以确定对这些嵌入式文档的访问。 |
| $$修剪 | $redact在当前文档/嵌入文档级别排除所有字段,而无需进一步检查任何排除的字段。即使排除字段包含具有不同访问级别的嵌入式文档,这也适用。 |
| $$ KEEP | $redact返回或将所有字段保留在当前文档/嵌入式文档级别,而无需进一步检查此级别的字段。即使所包含的字段包含可能具有不同访问级别的嵌入式文档,这也适用。 |
本节中的示例使用db.collection.aggregate()2.6版本的mongoShell中提供的
帮助程序。
一个forecasts集合包含以下形式的文件,其中tags字段列出该文档/嵌入文档级别不同的访问值; 即值
指定任一或可以访问的数据:[ "G", "STLW" ]"G""STLW"
用户具有与任一标签获得的视图信息"STLW"或
"G"。要2014对该用户使用年份对所有文档进行查询,请包括$redact以下步骤:
聚合操作返回以下“已编辑”文档:
也可以看看
集合accounts包含以下文档:
在此示例文档中,该level字段确定查看数据所需的访问级别。
要对所有具有状态的文档运行查询,A并
在级别排除文档/嵌入文档中包含的所有字段5,请包括一个在该字段$redact中指定系统变量的
阶段
:"$$PRUNE"then
该$redact阶段评估该level字段以确定访问权限。如果该level字段等于5,则排除该级别的所有字段,即使被排除的字段包含可能具有不同level值的嵌入式文档(例如该shipping_addr
字段)。
聚合操作返回以下“已编辑”文档:
结果集表明,该$redact阶段cc从整体上排除了该字段,包括shipping_addr包含嵌入文档的level字段的字段值等于3和不等于的字段
5。
也可以看看
实施字段级别修订,以为同一数据设置多种访问组合。