Partager via


$arrayToObject

L’opérateur $arrayToObject est utilisé pour convertir un tableau en un seul document. Cet opérateur est utile lorsque vous devez transformer des tableaux de paires clé-valeur en un format de document plus structuré.

Syntaxe

{
  $arrayToObject: "<array>"
}

Paramètres

Paramètre Descriptif
<array> Tableau à convertir en document. Chaque élément du tableau doit être soit : a) Tableau à deux éléments où le premier élément est le nom du champ et le deuxième élément est la valeur du champ. b) Document avec exactement deux champs, « k » et « v », où « k » est le nom du champ et « v » est la valeur du champ.

Examples

Considérez cet exemple de document de la collection des magasins.

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

Exemple 1 : Convertir le tableau en clé : document valeur

Cette requête convertit le salesByCategory tableau en objet où chacun categoryName est une clé et totalSales est la valeur correspondante. Cette transformation simplifie l’accès aux données de vente par catégorie directement à partir d’une structure d’objet.

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

La requête retourne le résultat suivant.

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