Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De $indexOfArray operator wordt gebruikt om te zoeken naar een element in een matrix en de index van het eerste exemplaar van het element te retourneren. Als het element niet wordt gevonden, wordt het geretourneerd -1. Deze operator is handig voor query's waarbij u de positie van een element in een matrix moet bepalen. Zoek bijvoorbeeld de index van een specifieke waarde of een specifiek object in een lijst.
Syntaxis
{
$indexOfArray: [ < array > , < searchElement > , < start > , < end > ]
}
Parameterwaarden
| Kenmerk | Description |
|---|---|
<array> |
De matrix waarin u naar het element wilt zoeken. |
<searchElement> |
Het element dat u zoekt in de matrix. |
<start> |
(Optioneel) De index waaruit de zoekopdracht moet worden gestart. Als u dit weglaat, begint de zoekopdracht vanaf het begin van de matrix. |
<end> |
(Optioneel) De index waarop de zoekopdracht moet worden beƫindigd. Als u dit weglaat, gaat de zoekopdracht tot het einde van de matrix. |
Voorbeelden
Bekijk dit voorbeelddocument uit de winkelverzameling.
{
"_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"
]
}
Voorbeeld 1: de index van het eerste exemplaar zoeken
Met deze query wordt de positie (index) van een specifieke categorienaam (DJ Headphones) gevonden in de salesByCategory matrix in de verzameling.
db.stores.aggregate([
{
$project: {
index: {
$indexOfArray: [
"$sales.salesByCategory.categoryName",
"DJ Headphones"
]
}
}
},
// Limit the result to the first 3 documents
{ $limit: 3 }
])
Deze query retourneert de volgende resultaten:
[
{
"_id": "649626c9-eda1-46c0-a27f-dcee19d97f41",
"index": -1
},
{
"_id": "8345de34-73ec-4a99-9cb6-a81f7b145c34",
"index": -1
},
{
"_id": "57cc4095-77d9-4345-af20-f8ead9ef0197",
"index": -1
}
]
Voorbeeld 2: De index zoeken in een bereik
Deze query vindt de positie van de promotie-gebeurtenis 'Bargain Blitz Days' in de promotionEvents matrix binnen een specifiek bereik van indexen (3 tot 5) en filtert resultaten samen met het retourneren van de eerste drie overeenkomende documenten
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 }
])
Deze query retourneert de volgende resultaten:
[
{
"_id": "ced8caf0-051a-48ce-88d3-2935815261c3",
"index": 3
},
{
"_id": "509be7ce-539a-41b5-8fde-b85fb3ef3faa",
"index": 3
},
{
"_id": "d06e8136-9a7f-4b08-92c8-dc8eac73bad3",
"index": 3
}
]
Verwante inhoud
- Bekijk de opties voor het migreren van MongoDB naar Azure DocumentDB.
- Lees meer over functiecompatibiliteit met MongoDB.