Aracılığıyla paylaş


$map

işleci $map , bir dizideki her öğeye bir ifade uygulamak ve uygulanan sonuçları içeren bir dizi döndürmek için kullanılır. Bu işleç, her öğeyi değiştirme veya belirli alanları ayıklama gibi belgeler içindeki dizileri dönüştürmek için kullanışlıdır.

Sözdizimi

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

Parametreler

Parametre Description
input İfade tarafından işlenen dizi.
as Dizideki her öğenin değişken adı.
in Her öğeye uygulanacak ifade.

Örnekler

Stores koleksiyonundaki bu örnek belgeyi göz önünde bulundurun.

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

Örnek 1: Kategori adlarını ayıklama

Bu sorgu, için storeskoleksiyonu filtreler _id ve ardından salesByCategory dizisindeki her öğenin $map işlecini kullanarak toplamSales değerinin 500 arttığı yeni bir alan categoryNames oluşturur.

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

Bu sorgu aşağıdaki sonucu döndürür.

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