$redact(权限过滤)

最后更新:2026-10-09

$redact(权限过滤)

$redact 按文档每层级的权限元数据决定保留、排除还是继续深入,实现行级与字段级过滤。它与 $$KEEP、$$PRUNE、$$DESCEND 三个系统变量配合:$$DESCEND 进入内嵌文档继续判断,$$PRUNE 丢弃该文档及其子树,$$KEEP 保留当前文档。注意它只是查询侧过滤,不是安全边界。

分类高级与诊断
MongoDB 版本1.0+
示例语言mongosh (Shell)

📝 语法

{ $redact: { $cond: { if: { $eq: [ "$level", "用户级别" ] }, then: "$$PRUNE", else: "$$DESCEND" } } }

⚙️ 参数

条件表达式在每个嵌套层级求值的表达式,返回 $$KEEP、$$PRUNE 或 $$DESCEND。

返回值:按权限裁剪后的文档流

▶ 示例

请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):

// $redact:只保留 access 为 public 的内容
db.employees.aggregate([
  { $redact: {
    $cond: { if: { $eq: ['$access', 'public'] }, then: '$$KEEP', else: '$$DESCEND' }
  } }
])

运行结果:

// 非 public 的文档或字段被移除

📌 注意事项

更多实战案例即将上线,敬请期待。

📚 相关教程

❓ 常见问题

Q$$DESCEND 什么时候用?
A当前文档允许但需要继续检查内嵌文档时使用,决定权下放到子层级。
Q$redact 能替代权限系统吗?
A它能做文档级过滤,但不是安全边界,客户端仍可直接查询集合。
Q$redact 与 $match 有什么区别?
A$match 按顶层条件过滤整条文档;$redact 按层级递归决定每层去留。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏