Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Оператор $indexOfArray используется для поиска элемента в массиве и возврата индекса первого вхождения элемента. Если элемент не найден, возвращается -1. Этот оператор полезен для запросов, в которых необходимо определить положение элемента в массиве. Например, поиск индекса определенного значения или объекта в списке.
Syntax
{
$indexOfArray: [ < array > , < searchElement > , < start > , < end > ]
}
Parameters
| Parameter | Description |
|---|---|
<array> |
Массив, в котором требуется выполнить поиск элемента. |
<searchElement> |
Элемент, который вы ищете в массиве. |
<start> |
(Необязательно) Индекс, с которого нужно запустить поиск. Если опущен, поиск начинается с начала массива. |
<end> |
(Необязательно) Индекс, по которому выполняется поиск. Если опущено, поиск переходит до конца массива. |
Examples
Рассмотрим этот пример документа из коллекции магазинов.
{
"_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"
]
}
Пример 1. Поиск индекса первого вхождения
Этот запрос находит позицию (индекс) определенного имени категории (DJ Headphones) внутри salesByCategory массива в коллекции.
db.stores.aggregate([
{
$project: {
index: {
$indexOfArray: [
"$sales.salesByCategory.categoryName",
"DJ Headphones"
]
}
}
},
// Limit the result to the first 3 documents
{ $limit: 3 }
])
Этот запрос возвращает следующие результаты:
[
{
"_id": "649626c9-eda1-46c0-a27f-dcee19d97f41",
"index": -1
},
{
"_id": "8345de34-73ec-4a99-9cb6-a81f7b145c34",
"index": -1
},
{
"_id": "57cc4095-77d9-4345-af20-f8ead9ef0197",
"index": -1
}
]
Пример 2. Поиск индекса в диапазоне
Этот запрос находит позицию события продвижения "Сделка Blitz Days" внутри массива в promotionEvents пределах определенного диапазона индексов (от 3 до 5) и фильтрует результаты вместе с возвратом первых трех соответствующих документов
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 }
])
Этот запрос возвращает следующие результаты:
[
{
"_id": "ced8caf0-051a-48ce-88d3-2935815261c3",
"index": 3
},
{
"_id": "509be7ce-539a-41b5-8fde-b85fb3ef3faa",
"index": 3
},
{
"_id": "d06e8136-9a7f-4b08-92c8-dc8eac73bad3",
"index": 3
}
]
Связанный контент
- Просмотрите параметры миграции из MongoDB в Azure DocumentDB.
- Дополнительные сведения о совместимости функций с MongoDB.