Delen via


$map

De $map operator wordt gebruikt om een expressie toe te passen op elk element in een matrix en een matrix met de toegepaste resultaten te retourneren. Deze operator is handig voor het transformeren van matrices in documenten, zoals het wijzigen van elk element of het extraheren van specifieke velden.

Syntaxis

{
  $map: {
    input: <array>,
    as: <variable>,
    in: <expression>
  }
}

Parameterwaarden

Kenmerk Description
input De matrix verwerkt door de expressie.
as De variabelenaam voor elk element in de matrix.
in De expressie die moet worden toegepast op elk element.

Voorbeelden

Bekijk dit voorbeelddocument uit de winkelverzameling.

{
    "_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
    "name": "Lakeshore Retail",
    "location": {
        "lat": -51.3041,
        "lon": -166.0838
    },
    "staff": {
        "totalStaff": {
            "fullTime": 5,
            "partTime": 20
        }
    },
    "sales": {
        "totalSales": 266491,
        "salesByCategory": [
            {
                "categoryName": "Towel Racks",
                "totalSales": 13237
            },
            {
                "categoryName": "Washcloths",
                "totalSales": 44315
            },
            {
                "categoryName": "Face Towels",
                "totalSales": 42095
            },
            {
                "categoryName": "Toothbrush Holders",
                "totalSales": 47912
            },
            {
                "categoryName": "Hybrid Mattresses",
                "totalSales": 48660
            },
            {
                "categoryName": "Napkins",
                "totalSales": 31439
            },
            {
                "categoryName": "Pillow Cases",
                "totalSales": 38833
            }
        ]
    },
    "tag": [
        "#ShopLocal",
        "#FashionStore",
        "#SeasonalSale",
        "#FreeShipping",
        "#MembershipDeals"
    ]
}

Voorbeeld 1: Categorienamen extraheren

Met deze query wordt de stores verzameling gefilterd, _idwaarna een nieuw veld categoryNames wordt geprojecteerd waarbij elk element in de matrix salesByCategory de totale verkoop met 500 heeft verhoogd met behulp van de operator $map.

db.stores.aggregate([{
        $match: {
            _id: "988d2dd1-2faa-4072-b420-b91b95cbfd60"
        }
    },
    {
        $project: {
            categoryNames: {
                $map: {
                    input: "$sales.salesByCategory.totalSales",
                    as: "category",
                    in: {
                        $add: ["$$category", 500]
                    }
                }
            }
        }
    }
])

Deze query retourneert het volgende resultaat.

[
  {
      "_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
      "categoryNames": [
          13737,
          44815,
          42595,
          48412,
          49160,
          31939,
          39333
      ]
  }
]