$indexOfBytes (agregação)
Nesta página
Definição
$indexOfBytes
Pesquisa uma string para uma ocorrência de uma substring e retorna o índice de bytes UTF-8 (com base em zero) da primeira ocorrência. Se a substring não for encontrada, retorna
-1
.$indexOfBytes
tem a seguintesintaxe de expressão do operador :{ $indexOfBytes: [ <string expression>, <substring expression>, <start>, <end> ] } OperandoDescrição<string expression>
Pode ser qualquer expressão válida desde que resolva para uma string. Para obter 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,$indexOfBytes
retornaránull
.Se a expressão de string não for resolvida para uma string ou
null
nem se referir a um campo ausente,$indexOfBytes
retornará um erro.<substring expression>
Pode ser qualquer expressão válida desde que resolva para uma string. Para obter mais informações sobre expressões, consulte Operadores de Expressão.<start>
Opcional Um número integral que especifica a posição do índice inicial para a Atlas Search. Pode ser qualquer expressão válida que resolva um número integral não negativo.<end>
Opcional Um número integral que especifica a posição do índice final 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,$indexOfBytes
utiliza o valor<end>
como o valor do índice<start>
em vez do valor<end>
.
Comportamento
Se
<string expression>
for nulo,$indexOfBytes
retornaránull
.Se
$indexOfBytes
for chamado em um campo que não existe no documento,$indexOfBytes
retornaránull
.Se
<string expression>
não for uma string e não nulo,$indexOfBytes
retornará um erro.Se
<substring expression>
for nulo,$indexOfBytes
retornará um erro.Se
<start>
ou<end>
for um número negativo,$indexOfBytes
retornará um erro.Se
<start>
for um número maior que<end>
,$indexOfBytes
retornará-1
.Se
<start>
for um número maior que o comprimento de bytes da string,$indexOfBytes
retornará-1
.Se
<start>
ou<end>
receber um valor que não seja um número inteiro,$indexOfBytes
retornará um erro.Se o
<substring expression>
for encontrado várias vezes dentro do<string expression>
, então$indexOfBytes
retornará o índice do primeiro<substring expression>
encontrado.
Alguns exemplos curtos para destacar comportamentos diferentes:
Exemplo | Resultados |
---|---|
{ $indexOfBytes: [ "cafeteria", "e" ] } | 3 |
{ $indexOfBytes: [ "cafétéria", "é" ] } | 3 |
{ $indexOfBytes: [ "cafétéria", "e" ] } | -1 |
{ $indexOfBytes: [ "cafétéria", "t" ] } | 5 |
{ $indexOfBytes: [ "foo.bar.fi", ".", 5 ] } | 7 |
{ $indexOfBytes: [ "vanilla", "ll", 0, 2 ] } | -1 |
{ $indexOfBytes: [ "vanilla", "ll", -1 ] } | -1 |
{ $indexOfBytes: [ "vanilla", "ll", 12 ] } | -1 |
{ $indexOfBytes: [ "vanilla", "ll", 5, 2 ] } | -1 |
{ $indexOfBytes: [ "vanilla", "nilla", 3 ] } | -1 |
{ $indexOfBytes: [ null, "foo" ] } | null |
Exemplos
Considere uma coleção inventory
com os seguintes documentos:
{ "_id" : 1, "item" : "foo" } { "_id" : 2, "item" : "fóofoo" } { "_id" : 3, "item" : "the foo bar" } { "_id" : 4, "item" : "hello world fóo" } { "_id" : 5, "item" : null } { "_id" : 6, "amount" : 3 }
A seguinte operação utiliza o operador $indexOfBytes
para recuperar os índices nos quais a string foo
está localizada em cada item:
db.inventory.aggregate( [ { $project: { byteLocation: { $indexOfBytes: [ "$item", "foo" ] }, } } ] )
A operação retorna os seguintes resultados:
{ "_id" : 1, "byteLocation" : "0" } { "_id" : 2, "byteLocation" : "4" } { "_id" : 3, "byteLocation" : "4" } { "_id" : 4, "byteLocation" : "-1" } { "_id" : 5, "byteLocation" : null } { "_id" : 6, "byteLocation" : null }