$redact (Redigir)
Última atualização: 2026-10-09
$redact (Redigir)
$redact filtra em nível de campo usando metadados de permissão armazenados nos documentos, com as variáveis de sistema $$KEEP, $$PRUNE e $$DESCEND. $$DESCEND desce para documentos aninhados, $$PRUNE descarta o documento e sua subárvore, e $$KEEP o mantém. É filtragem no lado da consulta, não uma fronteira de segurança.
| Categoria | Avançado e Diagnóstico |
|---|---|
| Versão do MongoDB | 1.0+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
{ $redact: { $cond: { if: { $eq: [ "$level", "userLevel" ] }, then: "$$PRUNE", else: "$$DESCEND" } } }
⚙️ Parâmetros
| expressão de condição | Expressão avaliada em cada nível de aninhamento, produzindo $$KEEP, $$PRUNE ou $$DESCEND. |
|---|
Retorno:Fluxo de documentos filtrado pelas regras de acesso
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// $redact: mantém apenas conteúdo público
db.employees.aggregate([
{ $redact: {
$cond: { if: { $eq: ['$access', 'public'] }, then: '$$KEEP', else: '$$DESCEND' }
} }
])
Saída:
// Documentos ou campos não públicos são removidos
📌 Notas
- Apenas $$KEEP, $$PRUNE e $$DESCEND são resultados válidos
- A avaliação recursa por todos os níveis de aninhamento
- Ao contrário de $project, $redact filtra recursivamente por nível
🏷️ Tags Relacionados
💡 Casos Relacionados
Mais casos práticos em breve.
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
QQuando $$DESCEND é usado?
AQuando o documento atual passa, mas documentos aninhados ainda precisam de verificação; adie a decisão para os níveis abaixo.
Q$redact pode substituir um sistema de controle de acesso?
AEle filtra no momento da consulta, mas não é uma fronteira de segurança; os clientes ainda podem consultar a coleção diretamente.
QComo $redact difere de $match?
A$match filtra documentos inteiros por condições de nível superior; $redact decide por nível de aninhamento recursivamente.