$indexOfArray (agregação)
Nesta página
Definição
$indexOfArray
Procura uma matriz para uma ocorrência de um valor especificado e retorna o índice da matriz da primeira ocorrência. Os índices da matriz começam em zero.
$indexOfArray
tem a seguintesintaxe de expressão do operador :{ $indexOfArray: [ <array expression>, <search expression>, <start>, <end> ] } CampoTipoDescrição<array>
arrayPode ser qualquer expressão válida desde que ela resolva para uma array. Para mais informações sobre expressões, consulte Operadores de Expressão.
Se a expressão de array for resolvida com um valor de
null
ou se referir a um campo ausente,$indexOfArray
retornaránull
.Se a expressão do array não resolver um array ou
null
nem se referir a um campo ausente,$indexOfArray
resultará em um erro.<search value>
stringPode ser qualquer expressão válida. Para mais informações sobre expressões, consulte Operadores de Expressão.<start>
inteiroOpcional. Um inteiro ou um número que pode ser representado como inteiros (como 2.0), que especifica a posição inicial do índice para a pesquisa. Pode ser qualquer expressão válida que resolva um número integral não negativo.
Se não for especificado, a posição do índice inicial para a pesquisa é o início da string.
<end>
inteiroOpcional. Um inteiro ou um número que pode ser representado como inteiros (como 2.0), que especifica a posição final do índice para a pesquisa. Pode ser qualquer expressão válida que resolva um número integral não negativo. Se você especificar um valor de índice
<end>
, também deverá especificar um valor de índice<start>
; caso contrário,$indexOfArray
usará o valor<end>
como o valor de índice<start>
em vez do valor<end>
.Se não for especificado, a posição do índice final para a pesquisa é o final da string.
Comportamento
Se <search expression>
for encontrado várias vezes dentro de <array expression>
, então $indexOfArray
retornará o índice do primeiro <search expression>
a partir da posição inicial do índice.
$indexOfArray
retornará null
:
Se
<array expression>
for nulo, ouSe
<array expression>
se referir a um campo inexistente no documento de entrada.
$indexOfArray
retorna um erro:
Se
<array expression>
não for uma matriz e não nulo, ouSe
<start>
ou<end>
for um número inteiro negativo (ou um valor que pode ser representado como um número inteiro negativo, como -5,0).
$indexOfArray
retornará -1
:
Se a <expressão de pesquisa> não for encontrada na matriz, ou
Se
<start>
for um número maior que<end>
, ouSe
<start>
for um número maior que o comprimento da array.
Exemplo | Resultados |
---|---|
{ $indexOfArray: [ [ "a", "abc" ], "a" ] } | 0 |
{ $indexOfArray: [ [ "a", "abc", "de", ["de"] ], ["de"] ] } | 3 |
{ $indexOfArray: [ [ 1, 2 ], 5 ] } | -1 |
{ $indexOfArray: [ [ 1, 2, 3 ], [1, 2] ] } | -1 |
{ $indexOfArray: [ [ 10, 9, 9, 8, 9 ], 9, 3 ] } | 4 |
{ $indexOfArray: [ [ "a", "abc", "b" ], "b", 0, 1 ] } | -1 |
{ $indexOfArray: [ [ "a", "abc", "b" ], "b", 1, 0 ] } | -1 |
{ $indexOfArray: [ [ "a", "abc", "b" ], "b", 20 ] } | -1 |
{ $indexOfArray: [ [ null, null, null ], null ] } | 0 |
{ $indexOfArray: [ null, "foo" ] } | null |
{ $indexOfArray: [ "foo", "foo" ] } | Erro |
Exemplo
O exemplo utiliza esta coleção 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 } ] )
O exemplo a seguir utiliza $indexOfArray
para localizar 2
na array items
:
db.inventory.aggregate( [ { $project: { index: { $indexOfArray: [ "$items", 2 ] } } } ] )
O exemplo retorna:
O primeiro índice de matriz para o valor
2
em cada matrizitems
, se encontrado. Os índices da matriz começam em0
.-1
para o índice se2
não estiver no arrayitems
.null
para o índice seitems
não for uma array ouitems
não existir.
Saída de exemplo:
[ { _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 } ]