Dela via


$arrayElemAt (matrisuttryck)

GÄLLER FÖR: MongoDB vCore

Operatorn $arrayElemAt används för att returnera elementet vid det angivna matrisindexet. Den här operatorn är användbar när du behöver extrahera ett visst element från en matris i dina dokument.

Syntax

{ "$arrayElemAt": [ "<array>", "<idx>" ] }

Parametrar

beskrivning
<array> Matrisreferensen som elementet hämtas från.
<idx> Indexet för det element som ska returneras. Indexet är nollbaserat. Ett negativt index räknas från slutet av matrisen.

Exempel

Nu ska vi förstå användningen med exempel-json från stores datauppsättningen.

{
  "_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 Cables", "totalSales": 1000},
      {"categoryName": "DJ Headphones", "totalSales": 35921}
    ],
    "fullSales": 3700
  },
  "promotionEvents": [
    {
      "eventName": "Cyber Monday Event",
      "promotionalDates": {
        "startDate": {"Year": 2024, "Month": 8, "Day": 1},
        "endDate": {"Year": 2024, "Month": 8, "Day": 7}
      },
      "discounts": [{"categoryName": "DJ Speakers", "discountPercentage": 25}]
    },
    {
      "eventName": "Black Friday Event",
      "promotionalDates": {
        "startDate": {"Year": 2024, "Month": 8, "Day": 1},
        "endDate": {"Year": 2024, "Month": 8, "Day": 7}
      },
      "discounts": [{"categoryName": "DJ Speakers", "discountPercentage": 25}]
    },
    {
      "eventName": "Mega Discount Days",
      "promotionalDates": {
        "startDate": {"Year": 2024, "Month": 5, "Day": 11},
        "endDate": {"Year": 2024, "Month": 5, "Day": 18}
      },
      "discounts": [{"categoryName": "DJ Lights", "discountPercentage": 20}]
    }
  ],
  "tag": [
    "#ShopLocal", "#NewArrival", "#FashionStore", "#SeasonalSale", "#FreeShipping", "#MembershipDeals"
  ]
}

Exempel 1: Returnera det första elementet från ett matrisfält

Exemplet hämtar den första händelseinformationen från promotionEvents matrisen för det sökta arkivet.

db.stores.aggregate([
  { $match: { name: "Lakeshore Retail | DJ Equipment Stop - Port Cecile" } },
  {
    $project: {
      firstPromotionEvent: { $arrayElemAt: ["$promotionEvents", 0] } 
    }
  }
])

Frågan returnerar den första kampanjhändelsen json för det efterfrågade arkivet.

{
  "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
  "firstPromotionEvent": {
    "eventName": "Cyber Monday Event",
    "promotionalDates": {
      "startDate": { "Year": 2024, "Month": 8, "Day": 1 },
      "endDate": { "Year": 2024, "Month": 8, "Day": 7 }
    },
    "discounts": [
      { "categoryName": "DJ Speakers", "discountPercentage": 25 }
    ]
  }
}