$pullAll

Operatorn $pullAll används för att ta bort alla instanser av de angivna värdena från en matris. Den här operatorn är användbar när du behöver rensa matriser genom att ta bort flera specifika element i en enda åtgärd.

Både $pull och $pullAll används för att ta bort element från en matris, men de skiljer sig åt i hur de identifierar de element som ska tas bort. $pull tar bort alla element från en matris som matchar ett visst villkor, vilket kan vara ett enkelt värde eller en mer komplex fråga (till exempel matchande underdokumentfält). Å $pullAll andra sidan tar bort specifika värden som tillhandahålls som en matris med exakta matchningar, men det stöder inte villkor eller frågor. $pull I princip är mer flexibelt eftersom det tillåter villkorlig borttagning baserat på olika kriterier, medan $pullAll det är enklare att bara arbeta med en fast uppsättning värden.

Syntax

{
  $pullAll: { <field1>: [ <value1>, <value2>] }
}

Parameterar

Parameter Description
<field1> Fältet där de angivna värdena tas bort.
[ <value1>, <value2>, ... ] En matris med värden som ska tas bort från det angivna fältet.

Examples

Överväg det här exempeldokumentet från butiksamlingen.

{
    "_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
                }
            ]
        }
    ]
}

Exempel 1: Ta bort flera element från en matris

Om du vill ta bort rabatterna för "#MembershipDeals" och "#SeasonalSale" från matrisen "tag" kör du en fråga med operatorn $pulAll i taggfältet med de värden som ska tas bort.

db.stores.updateMany(
    //filter
    { _id: "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5"},
    {
      $pullAll: {
        tag: ["#MembershipDeals","#SeasonalSale" ]
      }
    }
)

Den här frågan returnerar följande resultat.

[
  {
    "acknowledged": true,
    "insertedId": null,
    "matchedCount": 1,
    "modifiedCount": 1,
    "upsertedCount": 0
  }
]