кодесурса
«MongoDB

Оператор этапов агрегации MongoDB - $ redact

script1adsense2code
script1adsense3code

Описание

Оператор $ redact может измениться и дает новую форму каждого документа в потоке, ограничивая содержимое каждого документа на основе информации, хранящейся в самих документах.

Синтаксис:

 {$ redact: <выражение>}

Выражением могут быть системные переменные $$ DESCEND, $$ PRUNE или $$ KEEP. Вот описание ниже

Системные переменные Описание
$$ DESCEND $ redact возвращает поля на текущем уровне документа, за исключением встроенных документов. Встроенные документы и встроенные документы в массивах также могут быть включены путем применения выражения $ cond к внедренным документам.
$$ PRUNE $ redact исключает все поля из уровня текущего документа / встроенного документа без дальнейшей проверки каких-либо исключенных полей. Исключенное поле содержит встроенные документы, которые могут иметь разные уровни доступа, также могут применяться без дальнейшей проверки.
$$ СОХРАНИТЬ $ redact сохраняет нетронутыми все поля на уровне текущего документа / внедренного документа, без дальнейшей проверки полей на этом уровне. Включенное поле содержит встроенные документы, которые могут иметь разные уровни доступа, также могут применяться без дальнейшей проверки.

Тестовая дата сбора образцов

Тестовая дата коллекции содержит документы следующей формы, где в поле тегов перечислены различные значения доступа для этого уровня документа / встроенного документа; то есть значение ["MM", "KKLT"] указывает, что "MM" или "KKLT" могут получить доступ к данным.

{
        "_id" : ObjectId("55432b302a8be1f2a41b9464"),
        "title" : "Department Report of 456",
        "tags" : [
                "MM",
                "KKLT"
        ],
        "year" : 2013,
        "subsections" : [
                {
                        "subtitle" : "Overview : Section 1",
                        "tags" : [
                                "PJ",
                                "MM"
                        ],
                        "content" : "Section 1: This is the content of section 1."
                },
                {
                        "subtitle" : "Section 2: Placement",
                        "tags" : [
                                "KKLT"
                        ],
                        "content" : "Section 2: This is the content of section 2."
                },
                {
                        "subtitle" : "Section 3: Projection",
                        "tags" : [
                                "FS"
                        ],
                        "content" : {
                                "text" : "Section 3: This is the content of section3.",
                                "tags" : [
                                        "LTS"
                                ]
                        }
                }
        ]
}

Пример: $ redact

Следующие команды показывают, что пользователь имеет доступ к просмотру информации с помощью тега «KKLT» или «MM», чтобы выполнить запрос для всех документов с 2013 года для этого пользователя.

var userAccess = [ "MM", "KKLT" ];
db.testdate.aggregate(
   [
     { $match: { year: 2013 } },
     { $redact: {
        $cond: {
           if: { $gt: [ { $size: { $setIntersection: [ "$tags", userAccess ] } }, 0 ] },
           then: "$$DESCEND",
           else: "$$PRUNE"
         }
       }
     }
   ]
);

Выход :

 {
        "_id": ObjectId ("55432b302a8be1f2a41b9464"),
        "title": "Отчет отдела 456",
        "теги": [
                «ММ»,
                "KKLT"
        ],
        "2013 год,
        «подразделы»: [
                {
                        «субтитры»: «Обзор: Раздел 1»,
                        "теги": [
                                "PJ",
                                «ММ»
                        ],
                        «content»: «Раздел 1: Это содержание раздела 1.»
                },
                {
                        «подзаголовок»: «Раздел 2: Размещение»,
                        "теги": [
                                "KKLT"
                        ],
                        «content»: «Раздел 2: Это содержание раздела 2».
                }
        ]
}

Предыдущая: $ match
Далее: $ unwind

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code