Definición
$indexOfArrayBusca en un arreglo una ocurrencia de un valor especificado y devuelve el índice de la primera ocurrencia. Los índices de arreglo comienzan en cero.
$indexOfArraytiene lo siguiente Sintaxis de expresión del operador:{ $indexOfArray: [ <array expression>, <search expression>, <start>, <end> ] } CampoTipoDescripción<array>arreglo
Puede ser cualquier expresión válida mientras se resuelva en un arreglo. Para obtener más información sobre expresiones, consulta Expresiones.
Si la expresión de arreglo se resuelve en un valor de
nullo hace referencia a un campo que falta,$indexOfArraydevuelvenull.Si la expresión de arreglo no se resuelve como un arreglo o
nullni hace referencia a un campo faltante,$indexOfArraydevolvera un error.<search value>string
Puede ser cualquier expresión válida. Para obtener más información sobre expresiones, consulta Expresiones.
<start>entero
opcional. Un entero, o un número que pueda representarse como enteros (como 2.0), que especifica la posición del índice inicial para la búsqueda. Puede ser cualquier expresión válida que resuelva a un número integral no negativo.
Si no se especifica, la posición inicial del índice para la búsqueda es el comienzo de la string.
<end>entero
Opcional. Un entero, o un número que se pueda representar como enteros 2.0 (como), que especifica la posición del índice final de la búsqueda. Puede ser cualquier expresión válida que se resuelva en un número entero no negativo. Si especifica un
<end>valor de índice, también debe especificar un<start>valor de índice; de lo contrario, usa$indexOfArrayel<end>valor como<start>valor de índice en lugar del<end>valor.Si no se especifica, la posición de índice de finalización de la búsqueda es el final de la string.
Comportamiento
Si <search expression> se encuentra varias veces dentro de <array expression>, entonces $indexOfArray devuelve el índice de la primera <search expression> desde la posición del índice de inicio.
$indexOfArray devuelve null:
Si
<array expression>es nulo, oSi
<array expression>se refiere a un campo inexistente en el documento de entrada.
$indexOfArray devuelve un error:
Si
<array expression>no es un arreglo y no es null, oSi
<start>o<end>es un entero negativo (o un valor que puede representarse como un entero negativo, como -5,0).
$indexOfArray devuelve -1:
Si la <search expression> <expresión de búsqueda> no se encuentra en el arreglo, o
Si
<start>es un número mayor que<end>, oSi
<start>es un número mayor que la longitud de la matriz.
Ejemplo | Resultados |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Error |
Ejemplo
El ejemplo utiliza esta colección inventory:
db.inventory.insertMany( [ { _id: 0, items: [ "one", "two", "three" ] }, { _id: 1, items: [ 1, 2, 3 ] }, { _id: 2, items: [ 1, 2, 3, 2 ] }, { _id: 3, items: [ null, null, 2 ] }, { _id: 4, items: [ 2, null, null, 2 ] }, { _id: 5, items: null }, { _id: 6, amount: 3 } ] )
El siguiente ejemplo utiliza $indexOfArray para buscar 2 en el arreglo items:
db.inventory.aggregate( [ { $project: { index: { $indexOfArray: [ "$items", 2 ] } } } ] )
El ejemplo devuelve:
El primer índice de arreglo para el valor
2en cada arreglo deitems, si se encuentra. Los índices de los arreglos empiezan en0.-1para el índice si2no está en el arregloitems.nullpara el índice siitemsno es un arreglo oitemsno existe.
Ejemplo de salida:
[ { _id: 0, index: -1 }, { _id: 1, index: 1 }, { _id: 2, index: 1 }, { _id: 3, index: 2 }, { _id: 4, index: 0 }, { _id: 5, index: null }, { _id: 6, index: null } ]