Aracılığıyla paylaş


$arrayToObject

işleci $arrayToObject , bir diziyi tek bir belgeye dönüştürmek için kullanılır. Bu işleç, anahtar-değer çiftlerinin dizilerini daha yapılandırılmış bir belge biçimine dönüştürmeniz gerektiğinde kullanışlıdır.

Sözdizimi

{
  $arrayToObject: "<array>"
}

Parametreler

Parametre Description
<array> Belgeye dönüştürülecek dizi. Dizideki her öğe ya da olmalıdır: a) İlk öğenin alan adı, ikinci öğenin ise alan değeri olduğu iki öğeli bir dizi. b) "k" ve "v" olmak üzere tam olarak iki alanı olan bir belge; burada "k" alan adı, "v" ise alan değeridir.

Örnekler

Stores koleksiyonundaki bu örnek belgeyi göz önünde bulundurun.

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

Örnek 1: Diziyi anahtara dönüştürme: değer belgesi

Bu sorgu, diziyi salesByCategory her categoryName birinin bir anahtar olduğu ve totalSales karşılık gelen değer olduğu bir nesneye dönüştürür. Bu dönüşüm, doğrudan bir nesne yapısından kategoriye göre satış verilerine erişimi basitleştirir.

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

Sorgu aşağıdaki sonucu döndürür.

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