مشاركة عبر


$map

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

إعراب

{
  $map: {
    input: <array>,
    as: <variable>,
    in: <expression>
  }
}

Parameters

المعلمة‬ Description
input الصفيف الذي تمت معالجته بواسطة التعبير.
as اسم المتغير لكل عنصر في الصفيف.
in التعبير الذي يجب تطبيقه على كل عنصر.

أمثلة

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

{
    "_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
    "name": "Lakeshore Retail",
    "location": {
        "lat": -51.3041,
        "lon": -166.0838
    },
    "staff": {
        "totalStaff": {
            "fullTime": 5,
            "partTime": 20
        }
    },
    "sales": {
        "totalSales": 266491,
        "salesByCategory": [
            {
                "categoryName": "Towel Racks",
                "totalSales": 13237
            },
            {
                "categoryName": "Washcloths",
                "totalSales": 44315
            },
            {
                "categoryName": "Face Towels",
                "totalSales": 42095
            },
            {
                "categoryName": "Toothbrush Holders",
                "totalSales": 47912
            },
            {
                "categoryName": "Hybrid Mattresses",
                "totalSales": 48660
            },
            {
                "categoryName": "Napkins",
                "totalSales": 31439
            },
            {
                "categoryName": "Pillow Cases",
                "totalSales": 38833
            }
        ]
    },
    "tag": [
        "#ShopLocal",
        "#FashionStore",
        "#SeasonalSale",
        "#FreeShipping",
        "#MembershipDeals"
    ]
}

مثال 1: استخراج أسماء الفئات

يقوم هذا الاستعلام بتصفية stores المجموعة ل _id، ثم يعرض حقلا categoryNames جديدا حيث يزيد إجمالي المبيعات لكل عنصر في صفيف salesByCategory بمقدار 500 باستخدام عامل التشغيل $map.

db.stores.aggregate([{
        $match: {
            _id: "988d2dd1-2faa-4072-b420-b91b95cbfd60"
        }
    },
    {
        $project: {
            categoryNames: {
                $map: {
                    input: "$sales.salesByCategory.totalSales",
                    as: "category",
                    in: {
                        $add: ["$$category", 500]
                    }
                }
            }
        }
    }
])

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

[
  {
      "_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
      "categoryNames": [
          13737,
          44815,
          42595,
          48412,
          49160,
          31939,
          39333
      ]
  }
]