Definição
$indexOfBytesNovidade na versão 3.4.
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.$indexOfBytestem 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 mais informações sobre expressões, consulte Expressões.
Se a expressão de string for resolvida com um valor de
nullou se referir a um campo$indexOfBytesausente,nullretornará.Se a expressão de string não se resolver em uma string ou
nullnem se referir a um campo ausente, retornará um$indexOfByteserro.<substring expression>Pode ser qualquer expressão válida desde que resolva para uma string. Para mais informações sobre expressões, consulte Expressões.
<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
<end>valor de índice, também deverá especificar um<start>valor de índice; caso contrário, utiliza$indexOfByteso<end>valor como o<start>valor do índice em vez do<end>valor.
Comportamento
Se
<string expression>for nulo,$indexOfBytesretornaránull.Se
$indexOfBytesfor chamado em um campo que não existe no documento,$indexOfBytesretornaránull.Se
<string expression>não for uma string e não nulo,$indexOfBytesretornará um erro.Se
<substring expression>for nulo,$indexOfBytesretornará um erro.Se
<start>ou<end>for um número negativo,$indexOfBytesretornará um erro.Se
<start>for um número maior que<end>,$indexOfBytesretornará-1.Se
<start>for um número maior que o comprimento de bytes da string,$indexOfBytesretornará-1.Se
<start>ou<end>receber um valor que não seja um número inteiro,$indexOfBytesretornará um erro.Se o
<substring expression>for encontrado várias vezes dentro do<string expression>, então$indexOfBytesretornará o índice do primeiro<substring expression>encontrado.
Alguns exemplos curtos para destacar comportamentos diferentes:
Exemplo | Resultados |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 }