$redact

$redact Toplama işlem hattındaki aşama, erişim haklarına veya diğer koşullara göre bir koleksiyondaki belgelerin alanlarını dinamik olarak filtrelemek için kullanılır. İşlem hattındaki her belgeyi işler ve belirtilen mantığa göre alanları kaldırır veya korur.

Sözdizimi

{
  $redact: <expression>
}

Parametreler

Parametre Description
<expression> Aşağıdakilerden birini değerlendiren geçerli bir MongoDB ifadesi: $$DESCEND, $$PRUNEveya $$KEEP. Bu değişkenler belgenin tutulup kaldırılacağını veya belgedeki daha derin katmanlara geçiş yapılıp yapılmayacağını belirler.

Örnekler

Stores koleksiyonundaki bu örnek belgeyi göz önünde bulundurun.

{
    "_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
    "name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
    "location": {
        "lat": -89.2384,
        "lon": -46.4012
    },
    "staff": {
        "totalStaff": {
            "fullTime": 8,
            "partTime": 20
        }
    },
    "sales": {
        "totalSales": 75670,
        "salesByCategory": [
            {
                "categoryName": "Wine Accessories",
                "totalSales": 34440
            },
            {
                "categoryName": "Bitters",
                "totalSales": 39496
            },
            {
                "categoryName": "Rum",
                "totalSales": 1734
            }
        ]
    },
    "promotionEvents": [
        {
            "eventName": "Unbeatable Bargain Bash",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 6,
                    "Day": 23
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 7,
                    "Day": 2
                }
            },
            "discounts": [
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 7
                },
                {
                    "categoryName": "Bitters",
                    "discountPercentage": 15
                },
                {
                    "categoryName": "Brandy",
                    "discountPercentage": 8
                },
                {
                    "categoryName": "Sports Drinks",
                    "discountPercentage": 22
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 19
                }
            ]
        },
        {
            "eventName": "Steal of a Deal Days",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 21
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 29
                }
            },
            "discounts": [
                {
                    "categoryName": "Organic Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "White Wine",
                    "discountPercentage": 20
                },
                {
                    "categoryName": "Sparkling Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 17
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 23
                }
            ]
        }
    ]
}

Örnek 1: Hassas bilgileri yeniden oluşturma

Bu sorgu, yükseltmedeki değerinin promotionEvents 15%aştığı discountPercentage belgeler için alanı filtreler.

db.stores.aggregate([
  {
    $redact: {
      $cond: {
        if: {
          $gt: ["$promotionEvents.discounts.discountPercentage", 15]
        },
        then: "$$PRUNE",
        else: "$$DESCEND"
      }
    }
  }
])

Bu sorgu tarafından döndürülen ilk iki sonuç şunlardır:

[
    {
        "_id": "new-store-001",
        "name": "Adatum Corporation - Downtown Branch",
        "sales": {
            "totalSales": 5000
        },
        "createdDate": "2025-06-11T11:11:32.262Z",
        "status": "new",
        "staff": {
            "totalStaff": {
                "fullTime": 0,
                "partTime": 0
            }
        },
        "version": 1,
        "storeOpeningDate": "2025-06-11T11:11:32.262Z",
        "storeFeatures": 213
    },
    {
        "_id": "gaming-store-mall-001",
        "name": "Trey Research | Gaming Paradise - Mall Location",
        "location": {
            "lat": 35.6762,
            "lon": 139.6503
        },
        "createdDate": "2025-06-11T11:13:27.180Z",
        "status": "active",
        "staff": {
            "totalStaff": {
                "fullTime": 8,
                "partTime": 12
            },
            "manager": "Alex Johnson",
            "departments": [
                "gaming",
                "accessories",
                "repairs"
            ]
        },
        "sales": {
            "totalSales": 0,
            "salesByCategory": []
        },
        "operatingHours": {
            "weekdays": "10:00-22:00",
            "weekends": "09:00-23:00"
        },
        "metadata": {
            "version": 1,
            "source": "store-management-system"
        },
        "storeOpeningDate": "2025-06-11T11:11:32.262Z",
        "storeFeatures": 189
    }
]

Örnek 2: Etiketleri temel alarak erişimi kısıtlama

Bu sorgu, etiketini #MembershipDealsiçeren tüm belgeleri kaldırır.

db.stores.aggregate([
  {
    $redact: {
      $cond: {
        if: {
          $in: ["#MembershipDeals", "$tag"]
        },
        then: "$$PRUNE",
        else: "$$DESCEND"
      }
    }
  }
])