Definición
$indexOfBytesBusca una string en busca de la aparición de una subcadena y devuelve el índice de byte UTF-8 (basado en cero) de la primera aparición. Si no se encuentra la subcadena, retorna
-1.$indexOfBytestiene la siguiente sintaxis de expresión de operador:{ $indexOfBytes: [ <string expression>, <substring expression>, <start>, <end> ] } OperandoDescripción<string expression>Puede ser cualquier expresión válida siempre que se resuelva en una string. Para obtener más información sobre las expresiones, consulta Expresiones.
Si la expresión de cadena se resuelve en un valor de
nullo hace referencia a un campo que falta,$indexOfBytesdevuelvenull.Si la expresión de cadena no se resuelve en una cadena o
nullni hace referencia a un campo faltante,$indexOfBytesdevuelve un error.<substring expression>Puede ser cualquier expresión válida siempre que se resuelva en una string. Para obtener más información sobre las expresiones, consulta Expresiones.
<start>Opcional Un número entero que especifica la posición índice inicial para la búsqueda. Puede ser cualquier expresión válida que se resuelva en un número entero no negativo.
<end>Opcional. Un número entero que especifica la posición final del índice para la búsqueda. Puede ser cualquier expresión válida que dé como resultado un número entero no negativo. Si especifica un valor de índice
<end>, también debe especificar un valor de índice<start>; de lo contrario,$indexOfBytesutilizará el valor<end>como valor de índice<start>en lugar del valor<end>.
Comportamiento
Si
<string expression>es nulo,$indexOfBytesdevuelvenull.Si se llama a
$indexOfBytesen un campo que no existe en el documento,$indexOfBytesdevuelvenull.Si
<string expression>no es una cadena y no es nulo,$indexOfBytesdevuelve un error.Si
<substring expression>es nulo,$indexOfBytesdevuelve un error.Si
<start>o<end>es un número negativo,$indexOfBytesdevuelve un error.Si
<start>es un número mayor que<end>,$indexOfBytesdevuelve-1.Si
<start>es un número mayor que la longitud en bytes de la cadena,$indexOfBytesdevuelve-1.Si a
<start>o<end>se le proporciona un valor que no es un número entero,$indexOfBytesdevuelve un error.Si
<substring expression>se encuentra varias veces dentro de<string expression>, entonces$indexOfBytesdevuelve el índice del primer<substring expression>encontrado.
Algunos ejemplos breves para destacar diferentes comportamientos:
Ejemplo | Resultados |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ejemplos
Considere una colección inventory con los siguientes documentos:
db.inventory.insertMany( [ { _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 } ] )
La siguiente operación utiliza el operador $indexOfBytes para recuperar los índices en los que se encuentra la cadena foo en cada elemento:
db.inventory.aggregate( [ { $project: { byteLocation: { $indexOfBytes: [ "$item", "foo" ] }, } } ] )
La operación devuelve los siguientes 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 }