Bagikan melalui


$arrayToObject

Operator $arrayToObject digunakan untuk mengonversi array menjadi satu dokumen. Operator ini berguna ketika Anda perlu mengubah array pasangan kunci-nilai menjadi format dokumen yang lebih terstruktur.

Syntax

{
  $arrayToObject: "<array>"
}

Parameter-parameternya

Pengaturan Description
<array> Array yang akan dikonversi menjadi dokumen. Setiap elemen dalam array harus berupa: a) Array dua elemen di mana elemen pertama adalah nama bidang dan elemen kedua adalah nilai bidang. b) Dokumen dengan tepat dua bidang, "k" dan "v", di mana "k" adalah nama bidang dan "v" adalah nilai bidang.

Examples

Pertimbangkan dokumen sampel ini dari koleksi toko.

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

Contoh 1: Mengonversi array menjadi kunci: dokumen nilai

Kueri ini mengonversi salesByCategory array menjadi objek di mana masing-masing categoryName adalah kunci dan totalSales merupakan nilai yang sesuai. Transformasi ini menyederhanakan akses ke data penjualan berdasarkan kategori langsung dari struktur objek.

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"
                        }
                    }
                }
            }
        }
    }
])

Kueri mengembalikan hasil berikut.

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