다음을 통해 공유


$map

$map 연산자는 배열의 각 요소에 식을 적용하고 적용된 결과가 있는 배열을 반환하는 데 사용됩니다. 이 연산자는 각 요소를 수정하거나 특정 필드를 추출하는 등 문서 내에서 배열을 변환하는 데 유용합니다.

문법

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

매개 변수

매개 변수 Description
input 식에서 처리되는 배열입니다.
as 배열의 각 요소에 대한 변수 이름입니다.
in 각 요소에 적용할 식입니다.

예시

스토어 컬렉션에서 이 샘플 문서를 고려합니다.

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

예제 1: 범주 이름 추출

이 쿼리는 stores 컬렉션을 _id필터링한 다음 salesByCategory 배열의 각 요소에 $map 연산자를 사용하여 totalSales가 500씩 증가하는 새 필드를 categoryNames 투영합니다.

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

이 쿼리는 다음 결과를 반환합니다.

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