Bagikan melalui


$map

Operator $map digunakan untuk menerapkan ekspresi ke setiap elemen dalam array dan mengembalikan array dengan hasil yang diterapkan. Operator ini berguna untuk mengubah array dalam dokumen, seperti memodifikasi setiap elemen atau mengekstrak bidang tertentu.

Syntax

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

Parameter-parameternya

Pengaturan Description
input Array yang diproses oleh ekspresi.
as Nama variabel untuk setiap elemen dalam array.
in Ekspresi yang akan diterapkan ke setiap elemen.

Examples

Pertimbangkan dokumen sampel ini dari koleksi toko.

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

Contoh 1: Mengekstrak nama kategori

Kueri ini memfilter stores koleksi untuk _id, lalu memproyeksikan bidang categoryNames baru di mana setiap elemen dalam array salesByCategory memiliki totalSales yang ditingkatkan sebesar 500 menggunakan 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]
                    }
                }
            }
        }
    }
])

Kueri ini mengembalikan hasil berikut.

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