Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$substrBytes (operador de expresión)

$substrBytes

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

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

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

string expression

string

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

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

Si el argumento no se resuelve como una string o null ni hace referencia a un campo que falta, $substrBytes devuelve un error.

byte index

Número

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

byte index no puede hacer referencia a un índice de inicio que se encuentre en 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 número entero no negativo que pueda representarse como un número entero (como 2.0).

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

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

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

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

$substrBytes se diferencia de $substrCP en que $substrBytes cuenta los bytes de cada carácter, mientras que $substrCP cuenta los puntos de código, o caracteres, independientemente del número de bytes que use 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 mensaje:

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

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

Errores con 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 $substrBytes para separar el valor quarter (que contiene solo caracteres US-ASCII de un byte) en un yearSubstring y un quarterSubstring. El campo quarterSubstring representa el resto del string desde el byte index especificado después del yearSubstring. Se calcula restando el byte index de la longitud de la string usando $strLenBytes.

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 una 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