مشاركة عبر


$arrayToObject

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

إعراب

{
  $arrayToObject: "<array>"
}

Parameters

المعلمة‬ Description
<array> الصفيف الذي سيتم تحويله إلى مستند. يجب أن يكون كل عنصر في الصفيف إما: أ) صفيف مكون من عنصرين حيث يكون العنصر الأول هو اسم الحقل والعنصر الثاني هو قيمة الحقل. ب) مستند يحتوي على حقلين بالضبط، "k" و"v"، حيث "k" هو اسم الحقل و"v" هو قيمة الحقل.

أمثلة

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

{
    "_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: تحويل الصفيف إلى مفتاح: مستند القيمة

يحول salesByCategory هذا الاستعلام الصفيف إلى كائن حيث يكون كل categoryName منها مفتاحا وهو totalSales القيمة المقابلة. يبسط هذا التحويل الوصول إلى بيانات المبيعات حسب الفئة مباشرة من بنية عنصر.

db.stores.aggregate([{
        $match: {
            _id: "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5"
        }
    },
    {
        $project: {
            "sales.salesByCategory": {
                $arrayToObject: {
                    $map: {
                        input: "$sales.salesByCategory",
                        as: "item",
                        in: {
                            k: "$$item.categoryName",
                            v: "$$item.totalSales"
                        }
                    }
                }
            }
        }
    }
])

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

[
  {
      "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
      "sales": {
          "salesByCategory": {
              "DJ Headphones": 35921,
              "DJ Cables": 1000
          }
      }
  }
]