$redact (Redact)

Last updated: 2026-10-09

$redact (Redact)

$redact filters at field level using permission metadata stored in documents, with the system variables $$KEEP, $$PRUNE, and $$DESCEND. $$DESCEND descends into embedded documents, $$PRUNE drops the document and its subtree, and $$KEEP retains it. It is query-side filtering, not a security boundary.

CategoryAdvanced & Diagnostic
MongoDB Version1.0+
Example Languagemongosh (Shell)

📝 Syntax

{ $redact: { $cond: { if: { $eq: [ "$level", "userLevel" ] }, then: "$$PRUNE", else: "$$DESCEND" } } }

⚙️ Parameters

condition expressionExpression evaluated at each nesting level, yielding $$KEEP, $$PRUNE, or $$DESCEND.

Returns:Document stream pruned by access rules

▶ Example

Run the commands below in your local mongosh (requires a running mongod):

// $redact: keep only public content
db.employees.aggregate([
  { $redact: {
    $cond: { if: { $eq: ['$access', 'public'] }, then: '$$KEEP', else: '$$DESCEND' }
  } }
])

Output:

// Non-public documents or fields are removed

📌 Notes

More hands-on cases coming soon.

📚 Related Tutorials

❓ FAQ

QWhen is $$DESCEND used?
AWhen the current document passes but embedded documents still need checking; defer the decision downward.
QCan $redact replace an access-control system?
AIt filters at query time but is not a security boundary; clients can still query the collection directly.
QHow does $redact differ from $match?
A$match filters whole documents by top-level conditions; $redact decides per nesting level recursively.
Web-Tutorial.com

Web-Tutorial Tech Team

A team of developers maintaining programming tutorials. Each tutorial is written and reviewed by developers with expertise in that field. We work to keep our content accurate and reliable — if you spot an issue, please let us know.

100%

🙏 帮我们做得更好

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

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