$redact (伏せ字化)

最終更新:2026-10-09

$redact (伏せ字化)

$redact は、ドキュメントに埋め込まれた権限メタデータを使ってフィールドレベルでフィルターし、システム変数の $$KEEP、$$PRUNE、$$DESCEND を使います。$$DESCEND は埋め込みドキュメントに降りていき、$$PRUNE はドキュメントとそのサブツリーを落とし、$$KEEP は保持します。クエリ側のフィルタリングであり、セキュリティの境界ではありません。

カテゴリ高度と診断
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

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

⚙️ パラメータ

条件式各ネストレベルで評価される式。$$KEEP、$$PRUNE、または $$DESCEND を返します。

戻り値:アクセスルールで絞り込まれたドキュメントストリーム

▶ 例

以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):

// $redact: 公開コンテンツだけを保持
db.employees.aggregate([
  { $redact: {
    $cond: { if: { $eq: ['$access', 'public'] }, then: '$$KEEP', else: '$$DESCEND' }
  } }
])

出力:

// 公開でないドキュメントやフィールドが除去される

📌 注意事項

さらなる実践ケースを近日公開予定。

📚 関連チュートリアル

❓ よくある質問

Q$$DESCEND はいつ使いますか?
A現在のドキュメントは通すが、埋め込みドキュメントはまだ確認が必要なときです。判定を下位に委ねます。
Q$redact はアクセス制御システムの代わりになりますか?
Aクエリ時にフィルターしますが、セキュリティの境界ではありません。クライアントはコレクションを直接クエリできます。
Q$redact と $match の違いは?
A$match はトップレベルの条件でドキュメント全体をフィルターします。$redact はネストレベルごとに再帰的に判定します。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%