Freigeben über


$indexOfArray

Der $indexOfArray Operator wird verwendet, um nach einem Element in einem Array zu suchen und den Index des ersten Vorkommens des Elements zurückzugeben. Wenn das Element nicht gefunden wird, wird es zurückgegeben -1. Dieser Operator ist nützlich für Abfragen, bei denen Sie die Position eines Elements innerhalb eines Arrays bestimmen müssen. Suchen Sie z. B. den Index eines bestimmten Werts oder Objekts in einer Liste.

Syntax

{
    $indexOfArray: [ < array > , < searchElement > , < start > , < end > ]
}

Die Parameter

Parameter Description
<array> Das Array, in dem Sie nach dem Element suchen möchten.
<searchElement> Das Element, nach dem Sie im Array suchen.
<start> (Optional) Der Index, aus dem die Suche gestartet werden soll. Wenn nicht angegeben, beginnt die Suche am Anfang des Arrays.
<end> (Optional) Der Index, an dem die Suche beendet werden soll. Wenn nicht angegeben, wird die Suche bis zum Ende des Arrays verschoben.

Examples

Betrachten Sie dieses Beispieldokument aus der Stores-Sammlung.

{
    "_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 Headphones",
                "totalSales": 35921
            }
        ],
        "fullSales": 3700
    },
    "promotionEvents": [
        {
            "eventName": "Bargain Blitz Days",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 3,
                    "Day": 11
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 2,
                    "Day": 18
                }
            },
            "discounts": [
                {
                    "categoryName": "DJ Turntables",
                    "discountPercentage": 18
                },
                {
                    "categoryName": "DJ Mixers",
                    "discountPercentage": 15
                }
            ]
        }
    ],
    "tag": [
        "#ShopLocal",
        "#SeasonalSale",
        "#FreeShipping",
        "#MembershipDeals"
    ]
}

Beispiel 1: Suchen des Indexes des ersten Vorkommens

Diese Abfrage findet die Position (Index) eines bestimmten Kategorienamens ("DJ Headphones") innerhalb des salesByCategory Arrays in der gesamten Sammlung.

db.stores.aggregate([
  {
    $project: {
      index: {
        $indexOfArray: [
          "$sales.salesByCategory.categoryName",
          "DJ Headphones"
        ]
      }
    }
  },
  // Limit the result to the first 3 documents
  { $limit: 3 } 
])

Diese Abfrage gibt die folgenden Ergebnisse zurück:

[
    {
        "_id": "649626c9-eda1-46c0-a27f-dcee19d97f41",
        "index": -1
    },
    {
        "_id": "8345de34-73ec-4a99-9cb6-a81f7b145c34",
        "index": -1
    },
    {
        "_id": "57cc4095-77d9-4345-af20-f8ead9ef0197",
        "index": -1
    }
]

Beispiel 2: Suchen des Indexes in einem Bereich

Diese Abfrage findet die Position des "Schnäppchen Blitz Days"-Heraufstufungsereignisses innerhalb des promotionEvents Arrays innerhalb eines bestimmten Indizes (3 bis 5) und filtert die Ergebnisse zusammen mit der Rückgabe der ersten drei übereinstimmenden Dokumente.

db.stores.aggregate([
  // Step 1: Project the index of the "Bargain Blitz Days" event name within the specified range
  {
    $project: {
      index: {
        $indexOfArray: [
          "$promotionEvents.eventName",
          "Bargain Blitz Days",
          3,
          5
        ]
      }
    }
  },
  // Step 2: Match documents where index > 0
  {
    $match: {
      index: { $gt: 0 }
    }
  },
 // Limit the result to the first 3 documents
  { $limit: 3 }                          
])

Diese Abfrage gibt die folgenden Ergebnisse zurück:

 [
    {
        "_id": "ced8caf0-051a-48ce-88d3-2935815261c3",
        "index": 3
    },
    {
        "_id": "509be7ce-539a-41b5-8fde-b85fb3ef3faa",
        "index": 3
    },
    {
        "_id": "d06e8136-9a7f-4b08-92c8-dc8eac73bad3",
        "index": 3
    }
]