Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Operatorn $indexOfArray används för att söka efter ett element i en matris och returnera indexet för den första förekomsten av elementet. Om elementet inte hittas returnerar -1det . Den här operatorn är användbar för frågor där du behöver fastställa positionen för ett element i en matris. Du kan till exempel hitta indexet för ett visst värde eller objekt i en lista.
Syntax
{
$indexOfArray: [ < array > , < searchElement > , < start > , < end > ]
}
Parameterar
| Parameter | Description |
|---|---|
<array> |
Matrisen där du vill söka efter elementet. |
<searchElement> |
Det element som du söker efter i matrisen. |
<start> |
(Valfritt) Indexet som sökningen ska startas från. Om det utelämnas startar sökningen från början av matrisen. |
<end> |
(Valfritt) Indexet där sökningen ska avslutas. Om det utelämnas går sökningen till slutet av matrisen. |
Examples
Överväg det här exempeldokumentet från butiksamlingen.
{
"_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"
]
}
Exempel 1: Hitta indexet för den första förekomsten
Den här frågan hittar positionen (indexet) för ett specifikt kategorinamn ("DJ Headphones") i matrisen salesByCategory i samlingen.
db.stores.aggregate([
{
$project: {
index: {
$indexOfArray: [
"$sales.salesByCategory.categoryName",
"DJ Headphones"
]
}
}
},
// Limit the result to the first 3 documents
{ $limit: 3 }
])
Den här frågan returnerar följande resultat:
[
{
"_id": "649626c9-eda1-46c0-a27f-dcee19d97f41",
"index": -1
},
{
"_id": "8345de34-73ec-4a99-9cb6-a81f7b145c34",
"index": -1
},
{
"_id": "57cc4095-77d9-4345-af20-f8ead9ef0197",
"index": -1
}
]
Exempel 2: Hitta indexet i ett intervall
Den här frågan hittar positionen för kampanjhändelsen "Bargain Blitz Days" i matrisen promotionEvents inom ett visst indexintervall (3 till 5) och filtrerar resultaten tillsammans med att returnera de tre första matchande dokumenten
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 }
])
Den här frågan returnerar följande resultat:
[
{
"_id": "ced8caf0-051a-48ce-88d3-2935815261c3",
"index": 3
},
{
"_id": "509be7ce-539a-41b5-8fde-b85fb3ef3faa",
"index": 3
},
{
"_id": "d06e8136-9a7f-4b08-92c8-dc8eac73bad3",
"index": 3
}
]
Relaterat innehåll
- Granska alternativen för att migrera från MongoDB till Azure DocumentDB.
- Läs mer om funktionskompatibilitet med MongoDB.