Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El $indexOfArray operador se usa para buscar un elemento en una matriz y devolver el índice de la primera aparición del elemento. Si no se encuentra el elemento, devuelve -1. Este operador es útil para las consultas en las que es necesario determinar la posición de un elemento dentro de una matriz. Por ejemplo, buscar el índice de un valor o objeto específico en una lista.
Syntax
{
$indexOfArray: [ < array > , < searchElement > , < start > , < end > ]
}
Parámetros
| Parámetro | Description |
|---|---|
<array> |
Matriz en la que desea buscar el elemento . |
<searchElement> |
Elemento que está buscando en la matriz. |
<start> |
(Opcional) Índice desde el que se va a iniciar la búsqueda. Si se omite, la búsqueda comienza desde el principio de la matriz. |
<end> |
(Opcional) Índice en el que se va a finalizar la búsqueda. Si se omite, la búsqueda va hasta el final de la matriz. |
Examples
Considere este documento de ejemplo de la colección de tiendas.
{
"_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"
]
}
Ejemplo 1: Buscar el índice de la primera aparición
Esta consulta busca la posición (índice) de un nombre de categoría específico ("Dj Headphones") dentro de la salesByCategory matriz en toda la colección.
db.stores.aggregate([
{
$project: {
index: {
$indexOfArray: [
"$sales.salesByCategory.categoryName",
"DJ Headphones"
]
}
}
},
// Limit the result to the first 3 documents
{ $limit: 3 }
])
Esta consulta devuelve los siguientes resultados:
[
{
"_id": "649626c9-eda1-46c0-a27f-dcee19d97f41",
"index": -1
},
{
"_id": "8345de34-73ec-4a99-9cb6-a81f7b145c34",
"index": -1
},
{
"_id": "57cc4095-77d9-4345-af20-f8ead9ef0197",
"index": -1
}
]
Ejemplo 2: Búsqueda del índice en un intervalo
Esta consulta busca la posición del evento de promoción "Gang Blitz Days" dentro de la promotionEvents matriz dentro de un intervalo específico de índices (de 3 a 5) y filtra los resultados junto con la devolución de los tres primeros documentos coincidentes
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 }
])
Esta consulta devuelve los siguientes resultados:
[
{
"_id": "ced8caf0-051a-48ce-88d3-2935815261c3",
"index": 3
},
{
"_id": "509be7ce-539a-41b5-8fde-b85fb3ef3faa",
"index": 3
},
{
"_id": "d06e8136-9a7f-4b08-92c8-dc8eac73bad3",
"index": 3
}
]
Contenido relacionado
- Revise las opciones para migrar de MongoDB a Azure DocumentDB.
- Obtenga más información sobre la compatibilidad de características con MongoDB.