Этап $redact в конвейере агрегации MongoDB управляет видимостью содержимого документов на основе условий, определённых в самих документах. Он обеспечивает безопасность на уровне полей, селективно включая или исключая вложенные секции документов во время выполнения запроса.
$redact рекурсивно проходит по каждому уровню документа и применяет условие. На основе результата он возвращает одну из трёх системных переменных:
$$DESCEND — сохраняет текущий уровень документа и продолжает оценивать вложенные поля$$PRUNE — удаляет текущий уровень и все его вложенные поля полностью$$KEEP — сохраняет текущий уровень и все его вложенные поля без дальнейшей оценкиdb.collection.aggregate([
{
$redact: {
$cond: {
if: { $in: ["admin", "$allowedRoles"] },
then: "$$KEEP",
else: "$$PRUNE"
}
}
}
])
В этом примере возвращаются только секции документа, содержащие "admin" в поле allowedRoles.
$redact реализует безопасность на уровне полей благодаря:
В отличие от традиционных фильтров запросов, которые работают с целыми документами, $redact позволяет использовать гранулярное, управляемое самим документом разграничение доступа — идеально для сценариев, где разные пользователи должны видеть разные части одного и того же документа.
Стадия $redact может возвращать $$DESCEND для удаления текущего уровня и всех его вложенных полей из документа.
Новый — ещё не проверен сообществом
Вы