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 siempre que se resuelva en un array. Para más información sobre expresiones, consulte Expresiones.
Si la expresión de matriz se resuelve en un valor de
nullo hace referencia a un campo que falta,$indexOfArraynulldevuelve.Si la expresión de matriz no se resuelve en una matriz o
nullni hace referencia a un campo faltante, devuelve un$indexOfArrayerror.<search value>string
Puede ser cualquier expresión válida. Para más información sobre expresiones, consulte Expresiones.
<start>entero
Opcional. Un entero o un número que se pueda representar como enteros 2.0 (como), que especifica la posición inicial del índice de la búsqueda. Puede ser cualquier expresión válida que se resuelva en un número entero 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 del índice final para la búsqueda es el final de la cadena.
Comportamiento
Si <search expression> se encuentra varias veces dentro <array expression> de, entonces devuelve el índice del $indexOfArray primer <search expression> desde la posición del índice inicial.
$indexOfArray nulldevuelve:
Si
<array expression>es nulo, oSi
<array expression>hace referencia a un campo inexistente en el documento de entrada.
$indexOfArray devuelve un error:
Si
<array expression>no es una matriz y no es nulo, oSi
<start>o<end>es un entero negativo (o un valor que puede representarse como un entero negativo, como -5.0).
$indexOfArray -1devuelve:
Si la <search expression> <expresión de búsqueda> no se encuentra en la matriz, 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 matriz para el valor
2en cada matrizitems, si se encuentra. Los índices de matriz comienzan en0.-1para el índice si2no está en la matrizitems.nullpara el índice siitemsno es una matriz 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 } ]