Docs Menu
Docs Home
/ /
Operadores de tuberías de agregación

$substrBytes (agregación)

$substrBytes

Devuelve la subcadena de una cadena. La subcadena comienza con el carácter en el índice de byte UTF-8 (basado en cero) especificado en la cadena y continúa hasta el número de bytes especificado.

$substrBytes tiene lo siguiente Sintaxis de expresión del operador:

{ $substrBytes: [ <string expression>, <byte index>, <byte count> ] }
Campo
Tipo
Descripción

string expression

string

La cadena de la que se extraerá la subcadena. string expression puede ser cualquier expresión válida siempre que se resuelva en una cadena. Para más información sobre expresiones, consulte Expresiones.

Si el argumento se resuelve en un valor de null o hace referencia a un campo que falta, devuelve una cadena$substrBytes vacía.

Si el argumento no se resuelve en una cadena o null ni hace referencia a un campo faltante, devuelve un$substrBytes error.

byte index

Número

Indica el punto de inicio de la subcadena. byte index puede ser cualquier expresión válida siempre que se resuelva en un entero no negativo o un número que pueda representarse como un entero 2.0 (como).

byte index no puede hacer referencia a un índice inicial ubicado en el medio de un carácter UTF-8 de varios bytes.

byte count

Número

Puede ser cualquier expresión válida siempre que se resuelva en un entero no negativo o un número que pueda representarse como un entero 2.0 (como).

byte count no puede resultar en un índice final que esté en el medio de un carácter UTF-8.

El operador utiliza los índices $substrBytes de8 bytes codificados en UTF-, donde cada punto de código o carácter puede usar entre uno y cuatro bytes para codificar.

Por ejemplo, los caracteres US-ASCII se codifican con un byte. Los caracteres con marcas diacríticas y caracteres alfabéticos latinos adicionales (caracteres latinos fuera del alfabeto inglés) se codifican con dos bytes. Los caracteres chinos, japoneses y coreanos suelen requerir tres bytes, y otros planos de Unicode (emojis, símbolos matemáticos, etc.) requieren cuatro bytes.

Es importante tener en cuenta el contenido de string expression porque proporcionar un byte index o byte count ubicado en el medio de un carácter UTF-8 generará un error.

$substrBytes se diferencia de $substrCP en que cuenta los bytes $substrBytes $substrCP de cada carácter, mientras que cuenta los puntos de código, o caracteres, independientemente de cuántos bytes utilice un carácter.

Ejemplo
Resultados
{ $substrBytes: [ "abcde", 1, 2 ] }
"bc"
{ $substrBytes: [ "Hello World!", 6, 5 ] }
"World"
{ $substrBytes: [ "cafétéria", 0, 5 ] }
"café"
{ $substrBytes: [ "cafétéria", 5, 4 ] }
"tér"
{ $substrBytes: [ "cafétéria", 7, 3 ] }

Errores con el mensaje:

"Error: Invalid range, starting index is a UTF-8 continuation byte."

{ $substrBytes: [ "cafétéria", 3, 1 ] }

Errores con el mensaje:

"Error: Invalid range, ending index is in the middle of a UTF-8 character."

Considere una colección inventory con los siguientes documentos:

db.inventory.insertMany( [
{ _id: 1, item: "ABC1", quarter: "13Q1", description: "product 1" },
{ _id: 2, item: "ABC2", quarter: "13Q4", description: "product 2" },
{ _id: 3, item: "XYZ1", quarter: "14Q2", description: null }
] )

La siguiente operación utiliza el operador para separar $substrBytes el quarter valor (que contiene solo caracteres US-ASCII de un byte) en un yearSubstring y quarterSubstring un. El quarterSubstring campo representa el resto de la cadena a partir del byte index especificado que sigue yearSubstring al. Se calcula restando byte index de la longitud de la cadena $strLenBytes utilizando.

db.inventory.aggregate(
[
{
$project: {
item: 1,
yearSubstring: { $substrBytes: [ "$quarter", 0, 2 ] },
quarterSubstring: {
$substrBytes: [
"$quarter", 2, { $subtract: [ { $strLenBytes: "$quarter" }, 2 ] }
]
}
}
}
]
)

La operación devuelve los siguientes resultados:

{ _id: 1, item: "ABC1", yearSubstring: "13", quarterSubstring: "Q1" }
{ _id: 2, item: "ABC2", yearSubstring: "13", quarterSubstring: "Q4" }
{ _id: 3, item: "XYZ1", yearSubstring: "14", quarterSubstring: "Q2" }

Crea una colección food con los siguientes documentos:

db.food.insertMany(
[
{ _id: 1, name: "apple" },
{ _id: 2, name: "banana" },
{ _id: 3, name: "éclair" },
{ _id: 4, name: "hamburger" },
{ _id: 5, name: "jalapeño" },
{ _id: 6, name: "pizza" },
{ _id: 7, name: "tacos" },
{ _id: 8, name: "寿司sushi" }
]
)

La siguiente operación utiliza el operador $substrBytes para crear un menuCode de tres bytes a partir del valor name:

db.food.aggregate(
[
{
$project: {
"name": 1,
"menuCode": { $substrBytes: [ "$name", 0, 3 ] }
}
}
]
)

La operación devuelve los siguientes resultados:

{ _id: 1, name: "apple", menuCode: "app" }
{ _id: 2, name: "banana", menuCode: "ban" }
{ _id: 3, name: "éclair", menuCode: "éc" }
{ _id: 4, name: "hamburger", menuCode: "ham" }
{ _id: 5, name: "jalapeño", menuCode: "jal" }
{ _id: 6, name: "pizza", menuCode: "piz" }
{ _id: 7, name: "tacos", menuCode: "tac" }
{ _id: 8, name: "寿司sushi", menuCode: "寿" }

Tip

Volver

$substr

En esta página