مشاركة عبر


$filter

$filter يتم استخدام عامل التشغيل لتصفية العناصر من صفيف استنادا إلى شرط محدد. يكون عامل التشغيل هذا مفيدا عندما تحتاج إلى معالجة عناصر صفيف معينة أو استردادها داخل المستندات.

إعراب

{
  $filter: {
    input: "<array>",
    as: "<string>",
    cond: "<expression>"
  }
}

Parameters

المعلمة‬ Description
input تعبير يحل إلى صفيف.
as سلسلة تحدد اسم المتغير لكل عنصر في صفيف الإدخال.
cond تعبير يحدد ما إذا كان يجب تضمين العنصر في صفيف الإخراج.

أمثلة

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

{
    "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
    "name": "Lakeshore Retail | DJ Equipment Stop - Port Cecile",
    "location": {
        "lat": 60.1441,
        "lon": -141.5012
    },
    "staff": {
        "totalStaff": {
            "fullTime": 2,
            "partTime": 0
        }
    },
    "sales": {
        "salesByCategory": [
            {
                "categoryName": "DJ Headphones",
                "totalSales": 35921
            },
            {
                "categoryName": "DJ Cables",
                "totalSales": 1000
            }
        ],
        "fullSales": 3700
    },
    "promotionEvents": [
        {
            "eventName": "Bargain Blitz Days",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 3,
                    "Day": 11
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 2,
                    "Day": 18
                }
            },
            "discounts": [
                {
                    "categoryName": "DJ Turntables",
                    "discountPercentage": 18
                },
                {
                    "categoryName": "DJ Mixers",
                    "discountPercentage": 15
                }
            ]
        },
        {
            "eventName": "Discount Delight Days",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 5,
                    "Day": 11
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 5,
                    "Day": 18
                }
            }
        }
    ],
    "tag": [
        "#ShopLocal",
        "#FashionStore",
        "#SeasonalSale",
        "#FreeShipping",
        "#MembershipDeals"
    ]
}

مثال 1: استرداد عنصر تمت تصفيته حسب الشرط

يوضح هذا الاستعلام كيفية تصفية فئة المبيعات استنادا totalSalesإلى .

db.stores.aggregate([{
        $match: {
            _id: "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5"
        }
    },
    {
        $project: {
            filteredSalesByCategory: {
                $filter: {
                    input: "$sales.salesByCategory",
                    as: "item",
                    cond: {
                        $gt: ["$$item.totalSales", 10000]
                    }
                }
            }
        }
    }
])

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

[
  {
      "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
      "filteredSalesByCategory": [
          {
              "categoryName": "DJ Headphones",
              "totalSales": 35921
          }
      ]
  }
]