Freigeben über


$arrayToObject

Der $arrayToObject Operator wird verwendet, um ein Array in ein einzelnes Dokument zu konvertieren. Dieser Operator ist nützlich, wenn Sie Arrays von Schlüsselwertpaaren in ein strukturiertes Dokumentformat umwandeln müssen.

Syntax

{
  $arrayToObject: "<array>"
}

Die Parameter

Parameter Description
<array> Das Array, das in ein Dokument konvertiert werden soll. Jedes Element im Array muss entweder sein: a) Ein Array mit zwei Elementen, wobei das erste Element der Feldname ist und das zweite Element der Feldwert ist. b) Ein Dokument mit genau zwei Feldern, "k" und "v", wobei "k" der Feldname ist und "v" der Feldwert ist.

Examples

Betrachten Sie dieses Beispieldokument aus der Stores-Sammlung.

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

Beispiel 1: Konvertieren des Arrays in einen Schlüssel: Wertdokument

Diese Abfrage konvertiert das salesByCategory Array in ein Objekt, bei dem es sich um categoryName einen Schlüssel handelt und totalSales der entsprechende Wert ist. Diese Transformation vereinfacht den Zugriff auf Verkaufsdaten nach Kategorie direkt aus einer Objektstruktur.

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

Die Abfrage gibt das folgende Ergebnis zurück.

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