مشاركة عبر


$pullAll

$pullAll يتم استخدام عامل التشغيل لإزالة كافة مثيلات القيم المحددة من صفيف. يكون عامل التشغيل هذا مفيدا عندما تحتاج إلى تنظيف الصفائف عن طريق إزالة عناصر محددة متعددة في عملية واحدة.

يتم استخدام كل من $pull و $pullAll لإزالة العناصر من صفيف، ولكنها تختلف في كيفية تحديدها للعناصر المراد إزالتها. $pull يزيل كافة العناصر من صفيف يتطابق مع شرط معين، والذي يمكن أن يكون قيمة بسيطة أو استعلام أكثر تعقيدا (مثل مطابقة حقول المستند الفرعي). من ناحية أخرى، $pullAll يزيل قيما محددة مقدمة كصفيف من التطابقات الدقيقة، ولكنه لا يدعم الشروط أو الاستعلامات. بشكل أساسي، $pull هو أكثر مرونة لأنه يسمح بالإزالة الشرطية استنادا إلى معايير مختلفة، بينما $pullAll هو أبسط، والعمل فقط مع مجموعة ثابتة من القيم.

إعراب

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

Parameters

المعلمة‬ Description
<field1> الحقل حيث ستتم إزالة القيم المحددة.
[ <value1>, <value2>, ... ] صفيف من القيم المراد إزالتها من الحقل المحدد.

أمثلة

ضع في اعتبارك نموذج المستند هذا من مجموعة المتاجر.

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

مثال 1: إزالة عناصر متعددة من صفيف

لإزالة خصومات "#MembershipDeals" و"#SeasonalSale" من صفيف "العلامة"، قم بتشغيل استعلام باستخدام عامل تشغيل $pulAll في حقل العلامة مع القيم المراد إزالتها.

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

يقوم هذا الاستعلام بإرجاع النتيجة التالية.

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